GetWindowTextA unable to get the text of ComboBox MFC C++ - c++

I'm using GetWindowTextA to get the text of ComboBox but it will be an empty string "" even the hwnd is correct.
No problem when using GetWindowTextA to get the text from other class, but it won't work for the class ComboBox. Is it something related to this that need other function to get text from ComboBox?
Thanks.
Editied:
The combobox is from a control in some other app's window
#include<windows.h>
#include<iostream>
using namespace std;
int main() {
POINT pt;
Sleep(3000);
GetCursorPos(&pt);
HWND hWnd = WindowFromPoint(pt);
char class_name[100];
char title[100];
GetClassNameA(hWnd,class_name, sizeof(class_name));
GetWindowTextA(hWnd,title,sizeof(title));
cout <<"Window name : "<<title<<endl;
cout <<"Class name : "<<class_name<<endl;
return 0;
}

If you've added a CComboBox variable to your dialog class, using the "Add Control Variable" wizard, as described here Add a member variable, you can readily use the CComboBox methods to retrieve the text of the selected combo item, as illustrated below:
void CMFCDlgAppDlg::OnBnClickedButton1()
{
CString itemText;
m_Combo.GetLBText(m_Combo.GetCurSel(), itemText);
AfxMessageBox(itemText);
}

Adding TCHAR szBuf[100]; and using SendMessage will be done.
#include<windows.h>
#include<iostream>
using namespace std;
int main() {
POINT pt;
Sleep(3000);
GetCursorPos(&pt);
HWND hWnd = WindowFromPoint(pt);
char class_name[100];
char title[100];
TCHAR szBuf[100];
GetClassNameA(hWnd,class_name, sizeof(class_name));
GetWindowTextA(hWnd,title,sizeof(title));
SendMessage(hWnd, WM_GETTEXT, 100, (LPARAM)szBuf);
//cout <<"Window name : "<<title<<endl;
cout <<"Class name : "<<class_name<<endl;
wcout <<"Window name : "<<szBuf<<endl;
system("PAUSE");
return 0;
}

Related

Unable to find child window of a parent window that don't have WindowName with ClassName #32770 (Dialog)

I am trying to get the hwnd of a child window(caption = "Reset") to apply in IsWindowVisible() function but the child window could not be found.
This is the code:
#include <iostream>
#include <windows.h>
using namespace std;
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
char class_name[100];
char title[100];
GetClassNameA(hwnd,class_name, sizeof(class_name));
GetWindowTextA(hwnd,title,sizeof(title));
cout <<"Window title: "<<title<<endl;
cout <<"Class name : "<<class_name<<endl;
cout <<"hwnd : " <<hwnd<<endl<<endl;
return TRUE;
}
int main()
{
HWND hwnd = ::FindWindowA("#32770",NULL);
EnumChildWindows(hwnd,EnumWindowsProc,0);
system("PAUSE");
return 0;
}
There are a lots of window with the same classname #32770 (Dialog), also without title. After run the code, the result came out different types of window (with classname like WorkerW, IME, etc.).
The tree diagram get from Spy++ are like this:
...Window 00180726 "" #32770 (Dialog)
...Window 001F0962 "Reset" Button
I tried to find the child window if window title and window class(#32770) are included, it succeed.
My question is: How to find the child window (Reset) if we don't have a specific parent window? I tried apply EnumWindows, EnumChildWindows, FindWindows, FindWindowsEx in main() but still can't get what I expect.
Advance thanks for any kind of helps.
You can use WindowFromPoint to get parent dialog if you know its position then call EnumChildWindows to get its child

c++ Having trouble about changing name on console window

LPCTSTR Process = ("Test game");
LPCTSTR windowName = Process(" Text");
system("color 0a");
SetConsoleTitle(windowName);
Can anyone please make this posiblle?
To change the current console title you can use the SetConsoleTitle WinAPI function:
#include <iostream>
#include <Windows.h>
int main(){
wchar_t newTitle[255] = L"My New Console Title";
SetConsoleTitle(newTitle); // set the current console title
return 0;
}

C++ FindWindow doesn't work

I have Windows 8 and Visual Studio 2013.
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
HWND hWnd = FindWindow(0,(LPCTSTR)"Skype");
if (hWnd == 0)
{
cerr << "Cannot find window" << endl;
}
return 0;
}
The window is called "Skype" TLoginForm in Spy++ so I use the correct name but I get the error message.(Cannot find window) I know there are lot of similar questions but i didn't get answer.
This issue may be that you're just casting a C-string to a T-string, which is probably a wide character string, so it's not going to work. Try this:
HWND hWnd = FindWindow(0,_T("Skype"));
This ensures the string constant is declared with the appropriate default character width that Windows API functions expect.

Simply update label in Qt

I have created a label with Qt Creator using a unique name, 'statusLabel'.
I then made a function to update this status label like so:
//Function to set the text in the status bar.
void AutoFish::updatelabel(QString str)
{
ui->statusLabel->setText(str);
}
This does not work and gives the following error:
C:\Qt\Tools\QtCreator\bin\AutoFish\autofish.cpp:24: error: C2227: left of '->statusLabel' must point to class/struct/union/generic type
I'm not sure what I'm doing wrong, I'm just trying to update the label text using that function. Should I be using something other than a label? I've been looking into slots to create an event to update the label, but most slot examples I find involve a pushButton as an event start, and that is not what I need.
Thank you.
EDIT: As per request, here is all of my source code(it's not very big): http://pastebin.com/CfQXdzBK
Because your method is declared as static, you can't acces non-static member ui directly.
Change
static void AutoFish::updatelabel(QString str);
to
void updatelabel(QString str);
in your header file.
There is no need for static keyword, because you want to set label for the specific instance of the window. Also, there is no need for AutoFish:: as you are declaring a method inside class declaration (however, you do need it in your cpp file).
As per the second error - inside your getWindow function, you need to have a instance of the AutoFish object in order to call updateLabel. So, either change your getWindow definition to:
HWND getWindow(AutoFish *af, LPCSTR processName)
{
HWND hwnd = FindWindowA(0, processName);
if(!hwnd) {
std::cout << "Error: Cannot find window!" << std::endl;
af->updatelabel("Error: Cannot find window.");
}
else {
std::cout << "Seccess! Window found!" << std::endl;
af->updatelabel("Seccess! Window Found!");
}
return hwnd;
}
and call it like this:
HWND window = getWindow(this, "FFXIVLauncher");
or make getWindow member of AutoFish class:
class AutoFish : public QMainWindow
{
// ...
HWND getWindow(LPCSTR processName);
// ...
};
HWND AutoFish::getWindow(LPCSTR processName) {
HWND hwnd = FindWindowA(0, processName);
if(!hwnd) {
std::cout << "Error: Cannot find window!" << std::endl;
updatelabel("Error: Cannot find window.");
}
else {
std::cout << "Seccess! Window found!" << std::endl;
updatelabel("Seccess! Window Found!");
}
return hwnd;
}
and this pointer will be implicitely passed to the getWindow.

How to get readable classname and title from HWND handle? in WinApi c++

I am using the following enumchild proc to get hwnd of each window, the problem is that i am unable to somehow detect any info from each hwnd so i can do what i want with the ones that are detected as the ones i need.
For example, how could i get window class name and the title of each window in the enum bellow?
I tried something like..
EDITED: copy pasted(if that helps)
TCHAR cName[MAX_PATH];
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam) {
TCHAR cName[MAX_PATH];
GetClassName(hwnd, cName, _countof(cName));
cout << cName << endl;
return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
HWND hwnd = FindWindow(0, TEXT("reference"));
EnumChildWindows(hwnd, EnumChildProc, 0);
system("PAUSE");
return 0;
}
It just returns the hexadec handle info and every single time it is same, shouldnt the GetClassName func change the cName into new handle each time?
Also GetClassName function returns number of chars written to cName, i dont really see how this is useful to me? I need to get my cName in some readable format so i can do something like
if(className == TEXT("classnameiamlookingfor" && hwndtitle = TEXT("thetitlethatinterestsme") DOSOMETHINGWITHIT();
But all i get here is hexadec mess.
Isn't it Unicode build?
Check again with below:
TCHAR className[MAX_PATH];
GetClassName(hwnd, className, _countof(cName));
_tprintf(cName);