[スタート]メニューの無効化

解決


ひよっこ  2003-04-18 11:45:14  No: 106753  IP: [192.*.*.*]

Windowsの[スタート]メニューを一時的に使用できなくすることって出来ますか?
[スタート]メニュー非表示設定にしても、使用することが出来るのでVBあたりで無効化したいのですが、方法がありましたら教えてください。
よろしくお願いします。

編集 削除
DotL  2003-04-18 22:51:43  No: 106754  IP: [192.*.*.*]

VBではなくVC++でやるべきです。確実なのはWM_USER+260のメッセージがタスクバーに届かないようにします。たとえば、

(フックのセット)

フックハンドル=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,NULL,GetWindowThreadProcessId(FindWindow("Shell_TrayWnd",""),NULL));

(フックプロシージャ)

LRESULT GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
    if (nCode>=0)
    {
        if (((MSG*)lParam)->message==WM_USER+260) (((MSG*)lParam)->message=0);
    }
    return CallNextHookEx(フックハンドル,nCode,wParam,lParam);
}

でもフックはだめですよねー?

編集 削除
ひよっこ  2003-04-22 00:49:01  No: 106755  IP: [192.*.*.*]

>DotLさん書き込みありがとうございます。
C++はあまりバリバリでないので変な質問になってしまいますが
フックしたら起動中のアプリケーションすべてにもイベントが取得できなくなくなることですよね・・・?
極論、自分のアプリだけイベントが取得できればいいんですけど・・・
VBでは無理みたいですね・・・;失礼しました。

編集 削除
たかみちえ  URL  2003-04-22 06:34:46  No: 106756  IP: [192.*.*.*]

フックは簡単に言うと、本来のウィンドウのプロシージャにメッセージが行く前に、
独自処理を通すっていうだけです。
そこで次のフックプロシージャもしくはウィンドウプロシージャにメッセージをそのまま渡すこともできるし、
そこで消してしまう(次のプロシージャにはそのメッセージはなかったことにする)ことも、変更することもできます。
  次のフックやウィンドウにはちゃんとメッセージは届きますし、イベントは届きますよ。

  多分あなたのパソコンにもいくつものフックアプリケーションが入ってると思います、フリーソフトではAgainTyper、窓立て2、マウ筋、秀Capsなどが入ります。
  簡単に言うと"〜Hook.dll"のような名前のあるDLLが、
その場にあるフリーソフトの多くは、フックを入れてるんでしょう。
  それらが入っていても、他のソフトは普通に動作しますよね。

  ただ確かに、VBでは不安定すぎるので、確実にC言語でやったほうがいいでしょう。
  Delphiでも十分可能ですけど、VBではDLLが作れないし独自定義のウィンドウメッセージの取得もつらいし、やはりちょっと条件が悪すぎます^^;確かに、両方とも知恵で切り抜けている人もいますが…。

  CもDelphiも、フックソフトを作るくらいの物を作れるだけのものなら、
お金をかけずに手に入ります。
(C言語はBCC、DelphiはDelphi6Personalが、ともにBorlandで登録してダウンロード可能)

編集 削除
ひよっこ  2003-04-27 18:04:48  No: 106757  IP: [192.*.*.*]

>たかみちえ様  詳しい助言ありがとうございます!
今までもHookが必要な場面は遭遇したのでしたが、無視して逃げていました・・・皆様の助言を元に、これを機会に勉強しようと思います。
本当にありがとうございました!

編集 削除