Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Neue Listview-Items per globalem Hook ggf. entfernen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.07.2005, 22:33 Uhr
~caipicascade
Gast


Hallo,

ich habe einen globalen WH_CALLWNDPROC Hook gesetzt (in meinem Programm, ohne dll, siehe http://neworder.box.sk/newsread_print.php?newsid=10952).

Die Callback-Funktion soll im Falle von LVM_ -SETITEMTEXT, -SETITEM, -INSERTITEM, also wenn ein neues Listview-Item erstellt / ihm ein Text zugewiesen wird, den Text überprüfen, und wenn er eines von mehreren vordefinierten 'verbotenen Wörtern' enthält, möchte ich das Item entfernen oder die Message gar nicht erst bei der Listview ankommen lassen.

Hier erstmal mein Code:

Code:
#include <stdio.h>
#include <windows.h>
#include "commctrl.h"

// our global callwndproc-hook-callback-function needs dll-compliance
#define WINEXPORT extern "C" __declspec (dllexport)

// global pointer var for later use in local callback
HHOOK hHook;

WINEXPORT LRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam ) {
  // if message is not allowed to process, return CallNextHookEx..
  if ( nCode < 0 ) return CallNextHookEx( hHook, nCode, wParam, lParam );
  // if message is safe to process, continue..
  if ( ( nCode == HC_ACTION ) && ( wParam == 0 ) ) {
    // examine the CWPSTRUCT. does it contain a relevant message?
    CWPSTRUCT *myCWP = (CWPSTRUCT*)lParam;
    // does the message create/change an ANSI lvitem?
    if (( myCWP->message == LVM_INSERTITEMA )
    ||  ( myCWP->message == LVM_SETITEMA )
    ||  ( myCWP->message == LVM_SETITEMTEXTA )) {
      // yes. let's examine the ANSI LVITEM
      LVITEMA *myLVIA = (LVITEMA*)myCWP->lParam;
      // problem resides HERE, any action (e.g. printf/sendmessage)  
      // crashes the process who is about to receive the message..!
      // LVITEMA->pszText check required here
      // LVITEMA->iItem should then eventually be removed..
      PostMessageA( myCWP->hwnd, LVM_DELETEITEM, myLVIA->iItem, 0 );
    }
    // does the message create/change a UNICODE lvitem?
    if (( myCWP->message == LVM_INSERTITEMW )
    ||  ( myCWP->message == LVM_SETITEMW )
    ||  ( myCWP->message == LVM_SETITEMTEXTW )) {
      // yes. let's examine the UNICODE LVITEM
      LVITEMW *myLVIW = (LVITEMW*)myCWP->lParam;
      // problem resides HERE, any action (e.g. printf/sendmessage)  
      // crashes the process who is about to recieve the message..!
      // LVITEMW->pszText check required here
      // LVITEMW->iItem should then eventually be removed..
    }
  }
  return 0;
  // MSDN says, better return CallNextHookEx( hHook, nCode, wParam, lParam );
  // to allow other hooks, but this crashes explorer & more..
}

long SetHook ( int iSwitch ) {
  if ( iSwitch == 1 ) {
    // 1 = register hook in hookchain as global hook  
    hHook = SetWindowsHookEx ( WH_CALLWNDPROC, (HOOKPROC)CallWndProc, GetModuleHandle(NULL), 0 );
    // params, results?
    printf( "SetWindowsHookEx( %d, %d, %d ) = %d\n", WH_CALLWNDPROC, (HOOKPROC)CallWndProc, GetModuleHandle(NULL), hHook );
    return( hHook != NULL );
  } else {
    // 0 = unregister hook
    int result;
    result = ( UnhookWindowsHookEx( hHook ) != 0 );
    printf( "UnhookWindowsHookEx( %d ) = %d\n", hHook, result );
  }
}


Also, wie in den Kommentaren vermerkt, crashed die Applikation der die Message gehört, wenn ich irgendeine Aktion ausführen will, und sei es bloss ein printf..! Ich möchte an den beiden vermerkten Stellen den Text des Items überprüfen und es dann gegebenenfalls entfernen.

Kann mir jemand dabei weiterhelfen? Vielen Dank schon mal im Voraus..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: