का उपयोग कर .NET अनुप्रयोग सूची नियंत्रण से आइटम नाम प्राप्त करें तो मूल रूप से मेरे पास यह सॉफ़्टवेयर है जो सूची फ़ॉर्म में डेटा आउटपुट करता है। यहां टिप्पणियों के लिए धन्यवाद, हमने समझा है कि यह संभवतः .NET में लिखा गया है।Winapi या mfc
मैं सूची स्कैन करना चाहता हूं ताकि मैं डेटा पर कुछ एल्गोरिदम कर सकूं।
जासूस ++ का उपयोग करके मुझे पता चला कि इस सूची को "पैनल 2" शीर्षक दिया गया है और मैं इसे संभालने के लिए संभाल सकता हूं (इसकी कक्षा "WindowsForms10.Window.8.app" है) EnumChildWindows का उपयोग कर।
हालांकि मुझे नहीं पता कि सूची में कैसे पहुंचे ताकि मैं इसकी वस्तुओं को पढ़ सकूं। मैंने "पैनल 2" हैंडल पर EnumChildWindows को आजमाया है और उन सभी विंडोज़ के कैप्शन को आउटपुट किया है लेकिन वे सभी खाली हैं।
क्या पैनल 2 actuall सूची हो सकता है? यदि ऐसा है तो क्या मैं इसे अभी (CListCtrl *) पर डाल सकता हूं?
एक्सिस ने टिप्पणियों में उल्लेख किया है कि शायद यह .NET में लिखा गया है, तो http://reflector.red-gate.com/download.aspx?TreatAsUpdate=1 जैसे कुछ का उपयोग करके नियंत्रण आईडी/हैंडल को प्राप्त करना संभव हो सकता है?
CWnd* mainWindow;
CWnd* panel;
CListCtrl* list;
BOOL CALLBACK findWindow(HWND hwnd,LPARAM lParam)
{
char text[8];
GetWindowText(hwnd,text,8);
if(strcmp(text,"Fetcher") == 0)
{
mainWindow= CWnd::FromHandle(hwnd);
return false;
}
return true;
}
BOOL CALLBACK findPanel(HWND hwnd,LPARAM lParam)
{
char text[7];
GetWindowText(hwnd,text,7);
if(strcmp(text,"Panel2") == 0)
{
panel = CWnd::FromHandle(hwnd);
return false;
}
return true;
}
void CAnalyzeDlg::OnBnClickedButton1()
{
mainWindow = 0;
while(mainWindow == 0)
{
::EnumWindows(findWindow,0);
}
mainWindow ->ActivateTopParent();
while(panel == 0) ::EnumChildWindows(mainWindow ->m_hWnd,findPanel,0);
CWnd* pointTest = NULL;
CString text = "";
int xx = 337;
int yy = 95;
while(yy < 1024 && (pointTest == NULL || strcmp(text,"") == 0 || strcmp(text,"Panel2") == 0))
{
pointTest = mainWindow->ChildWindowFromPoint(CPoint(xx,yy));
yy++;
if(pointTest != 0)
pointTest->GetWindowTextA(text);
}
if(strcmp(text,"") != 0)
MessageBox(0,text,0); // This never shows
}
क्या आपके पास पैनल 2 का हैंडलर है? जैसा कि मैंने कहा – besworland
। हाँ। – David
सबसे पहले, ऐसा लगता है कि आपका ऐप .NET में लिखा गया है (क्लास नाम में "विंडोजफॉर्म" का कारण)। दूसरा - इसे विंडो हैंडल प्राप्त करने के लिए, आपको 'FindWindow' या' FindWindowEx' 'कॉल करना चाहिए, और केवल उस कॉल के बाद' EnumChildWindows'। क्षमा करें अगर मैं असहाय सवाल समझता हूं। – eraxillan