Select ListView Item in TrueCrypt



  • Hi,

    erstmal vorab ich benutze Win7 64bit. Ich hoffe das gibt in diesem Fall keine Probleme mit 64bit.

    Ich arbeite gerade an einer Software, die TrueCrypt steuern soll, ich weiß auch dass TrueCrypt OpenSource ist, will aber nicht in den Code von TrueCrypt reinprogrammieren.

    Es funktioniert alles sehr gut, außer dass ich keinen Zugriff auf die Liste mit den Laufwerksbuchstaben bekomme, das NERVT! Ich will dass mein Programm den selektierten Laufwerksbuchstaben auswählen kann.

    Ich habs versucht mit OpenProcess(), Rechtevergabe und ProcessID von TrueCrypt sollte passen.

    Danach lege ich mir mit VirtalAllocEx die Speicherposition auf ein LVITEM *item, doch leider ist das kein LVITEM auf das ich zeige.

    Dann hätte ich mit WriteProcessMemory weitergemacht!

    Ich bin echt am verzweifeln, ich hoffe irgendjemand versteht meine Beschreibung. Ich könnte auch noch den Code posten, sitze aber gerade nicht an meinem Entwicklerrechner, werde ich aber nachreichen.

    Ich bin für jeden Tipp dankbar, und wenn es ein Buchtitel ist!
    Danke



  • HWND trueWin = FindWindowA(NULL,LPCSTR("TrueCrypt"));

    HWND deviceLetter = FindWindowExA(trueWin,NULL,LPCSTR("SysListView32"),NULL);

    DWORD processID;

    GetWindowThreadProcessId(deviceLetter,&processID);

    HANDLE process=OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);
    DWORD dw = GetLastError();

    LV_ITEM lvi;

    LV_ITEM* _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LV_ITEM), MEM_COMMIT, PAGE_READWRITE);

    lvi.state = LVIS_FOCUSED | LVIS_SELECTED;
    lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
    lvi.mask = LVIF_STATE;

    bool bSuccess = WriteProcessMemory(process, _lvi, &lvi, sizeof(LV_ITEM), NULL);

    int abc = ::SendMessage(deviceLetter, LVM_SETITEMSTATE, (WPARAM)0, (LPARAM)_lvi);

    VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);



  • Flipstar5 schrieb:

    HWND trueWin = FindWindowA(NULL,LPCSTR("TrueCrypt"));
    	
    	HWND deviceLetter = FindWindowExA(trueWin,NULL,LPCSTR("SysListView32"),NULL);
    	
     
    
    	DWORD processID;
    	
    
    	GetWindowThreadProcessId(deviceLetter,&processID);
    
    HANDLE process=OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID); 
    DWORD dw = GetLastError(); 
    
    LV_ITEM lvi;
    
    LV_ITEM* _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LV_ITEM), MEM_COMMIT, PAGE_READWRITE); 
     
    
     lvi.state = LVIS_FOCUSED | LVIS_SELECTED;
     lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
     lvi.mask = LVIF_STATE;
    
    	
    bool bSuccess = WriteProcessMemory(process, _lvi, &lvi, sizeof(LV_ITEM), NULL); 
    
    int abc = ::SendMessage(deviceLetter, LVM_SETITEMSTATE, (WPARAM)0, (LPARAM)_lvi);
    
     VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
    

    Es gibt hier im Forum auch Code-Tags 😉



  • Hi,

    versteht ihr mein Problem nicht oder kann mir wirklich keiner Helfen, bin echt am verzweifeln!


  • Mod

    Vielleicht solltest Du auch definieren welches item Du selektieren möchtest.

    Teste Deinen Code doch erstmal im eigenen Prozess bevor Du ihn an anderen Prozessesn ausprobierst.


Anmelden zum Antworten