Help calling and using a functions in visual c++ 6

Joined
Jun 30, 2005
Messages
59
Reaction score
0
Hi all i am very new to visual c++ . I am using visual studio 6 . So i might ask some simple questions but since i am new i consider you guys bare with me.

I have the following 2 block of codes and i want to be able to call the first one like this :

int pos=-1;
pos=GetPosByNick("name");


I am making a form with a textbox and a button. On the click of the button i want to take the input and place it instead of name in above function call and get the pos value and then use that in my second block of code instead of zero :

(WPARAM)0


so i be happy if an expert tell me step by step what do i need to do to be able to use these blocks of codes. Where to place them , what do i need to declare. Since it is my first attempt to do a program in visual c++ i be happy if an expert give me step by step instrcutions. Thanks



Code:
int GetPosByNick(CString szNick) 
{ 

HWND hList=NULL;  // List View identifier 

HWND parent,child; 
 parent=NULL; 
 child=NULL; 
 parent = ::FindWindow("My Window Class",NULL); 
CString c; 

child =::FindWindowEx(parent,0,"WTL_SplitterWindow",NULL); 
child =::FindWindowEx(child,0,"WTL_SplitterWindow",NULL); 
child =::FindWindowEx(child,0,"WTL_SplitterWindow",NULL); 
child =::FindWindowEx(child,0,"ATL:0053C8D0",NULL); 
hList=::FindWindowEx(child,0,"SysListView32",NULL); 


HWND hwnd=parent; 
HWND listview=hList; 

   int count=(int)::SendMessage(listview, LVM_GETITEMCOUNT, 0, 0); 
   int i; 

   LVITEM lvi, *_lvi; 
   char item[512]; 
   char *_item; 
   unsigned long pid; 
   HANDLE process; 

   GetWindowThreadProcessId(listview, &pid); 
   process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid); 

   _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE); 
	
   _item=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE); 
	

   lvi.cchTextMax=512; 
	
	
   for(i=0; i<count; i++) { 
	  lvi.iSubItem=2; 
	  lvi.pszText=_item; 
	  WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL); 
	  ::SendMessage(listview, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi); 

	   
	  ReadProcessMemory(process, _item, item, 512, NULL); 
	  //ReadProcessMemory(process, _subitem, subitem, 512, NULL); 
	   if(item==szNick) 
	  { 
		 VirtualFreeEx(process, _lvi, 0, MEM_RELEASE); 
		  ::CloseHandle(process); 
		 return i; 
	  } 
	   
   } 
VirtualFreeEx(process, _lvi, 0, MEM_RELEASE); 
 ::CloseHandle(process); 
return -1; 

}


Second block of code:


Code:
HWND listview=NULL;  // List View identifier 
 HWND parent,child; 
 parent=NULL; 
 child=NULL; 
 parent = ::FindWindow("My Window Class",NULL); 

 child =::FindWindowEx(parent,0,"WTL_SplitterWindow",NULL); 
 child =::FindWindowEx(child,0,"WTL_SplitterWindow",NULL); 
 child =::FindWindowEx(child,0,"WTL_SplitterWindow",NULL); 
 child =::FindWindowEx(child,0,"ATL:0053C8D0",NULL); 
 listview=::FindWindowEx(child,0,"SysListView32",NULL); 

 LVITEM lvi, *_lvi; 
 unsigned long pid; 
 HANDLE process; 

 GetWindowThreadProcessId(listview, &pid); 
 process=OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, pid); 
   if(process) 
   { 
	
   _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); 
   lvi.mask = LVIF_STATE; 
   lvi.state =15; 
   lvi.stateMask = LVIS_SELECTED | LVIS_FOCUSED; 

   WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL); 
   ::SendMessage(listview, LVM_SETITEMSTATE,[B] (WPARAM)0[/B], (LPARAM)_lvi); 
   VirtualFreeEx(process, _lvi, 0, MEM_RELEASE); 
   } 
 ::CloseHandle(process);
 
Sorry, but have no idea on this subject at all.
It may help you to google you problem or find a forum that deals with C++ 6 :thumb:
 
'all' you need to do is to put 'pos' into the 2nd block of txt - I think

so instead of

Code:
::SendMessage(listview, LVM_SETITEMSTATE, (WPARAM)0, (LPARAM)_lvi);

just put

Code:
::SendMessage(listview, LVM_SETITEMSTATE, (WPARAM)[b]pos[/b], (LPARAM)_lvi);

Sil
 
Back
Top