他のアプリを操作したい

[戻る]
michelmylove 2007/02/21(水) 16:35:55
いつもお世話になっております。

 前回、タスクトレイに表示されている他アプリのアイコンを
非表示したいということでいろいろ質問させて頂き、実現す
るに至りました、本当にありがとうございました。

 今回は、ついでに『言語バー』も非表示にしてしまおう
と思いFindWindow()で『言語バー』のHWNDを取得し単純に
       ShowWindow(HWND, WS_HIDE)
としたのですが、ダメでした。原因を調べようにも何から
手をつけていいのか(検索用語)がわかりません。

 他のアプリが実行時にメモリにロードされた時点でその
アプリのメモリ領域に他のアプリからアクセスする権限が
なくなる為、この様な事になっているのではと考えています。
実際の所どうなのでしょう?そして、どのような解決方法が
あるのでしょうか?是非、ご教授お願い致します。

環境:WindowXP / VC++6.0 / SDK

michelmylove 2007/02/21(水) 16:57:06
 今調べていたら、コントロールパネルの『地域と言語のオプション』
の設定でも非表示にできることが分かりました。でも自アプリから実現
したいと考えています。
 どんな些細な情報でも構いません、何か分かる方、参考になるホーム
ページを知っている方がおられましたらご教授お願い致します。

ぬふや 2007/02/21(水) 21:35:25
言語バーは副作用が大きそうな気もします。
なんとしてでも他プロセスに割り込みたいのならデバッグAPI使うことですが、タスク
トレイのほうで書いたように、お勧めしません。
ShowWindowAsyncAPIかWM_SHOWWINDOWメッセージでは駄目でしょうか。
「The ShowWindowAsync function sets the show state of a window 
created by a different thread」
とShowWindowAsyncの説明に有りますので、違うスレッドのウィンドウは
ShowWindowAsyncで制御するのが推奨なのかもしれません(未確認)。

ITO 2007/02/22(木) 09:25:58
> 今調べていたら、コントロールパネルの『地域と言語のオプション』
> の設定でも非表示にできることが分かりました。
レジストリーの設定等でどうにか出来ませんか?
レジストリーについては詳しくないので分りませんが、再起動も必要
になると思います。
ねふやさんの意見にもありますように強制的にシステムのウインドウを
非表示にするのは良くないです。

michelmylove 2007/02/22(木) 09:42:15
ご教授ありがとうございます、ぬふやさん。

 MSDNでShowWindowAsyncを調べてみた所、今回の私の
要望にぴったりマッチしているAPIだと思い、早速試し
て見たのですが駄目でした。因みに言語バーではなく
MSDN、電卓等のウィンドウに対して試してみた所、非
表示になりました。

 WM_SHOWWINDOWメッセージはよく分かりませんでした。
試してみたところ、非表示になる物(MSDN)もあれば
ならない物(電卓)もありましたので私の使い方が
宜しくないのかもしれません。

 しかし、どちらの方法でも非表示にならない言語バー
は(あいまいな表現ですが)そこら辺のウィンドウとは
一線を画すような特殊なウィンドウなのでしょうか?

 因みに私の方で調べてみた所、共有メモリを使用して
何とかなるでは、と微かな期待を感じているのですが実
際の所、共有メモリを使用して非表示にするという事は
可能でしょうか?

michelmylove 2007/02/22(木) 09:57:23
ご教授ありがとうございます、ITOさん。

 http://www.wg7.com/w2ktips/
上記ホームページにレジストリを操作しても非表示に
できるというような趣旨の事が書かれていましたが、
私もレジストリを操作するプログラムについては全く
把握しておりません。ちゃんと理解して適切なプログ
ラミングさえすれば何も怖い事はないと思うのですが
(致命的障害が発生する可能性があるので)自らの手で
レジストリはいじりたくないというのが本音です。

 ぬふやさんもおっしゃっておられましたが、言語バー
を非表示にする事はあまりよくないとは何故なのでしょう?
私の考えでは非表示なっているだけでプログラム自体は
表示されている時と変わらず動作し続けているものだと
思っているのですが・・・

ぬふや 2007/02/22(木) 21:24:00
基本的にレジストリの操作で致命的な障害が出るのは、編集すべきでない部
分を書き換えた場合や、限定された値で無いとエラーを起こす部分を編集する
場合のみです。

ちなみに、デバッグAPIを使った場合はもっと予測できない事態が起こりえます。
最悪の場合、セキュリティソフトが反応する場合や、変な値で重要なAPI呼び出
しをすることさえ考えられます。

言語バーの強制的な操作を良くないというのは、言語バーがシステムと深く関
わっている場合があるからです。他にも理由が有ると思います。

それと、WM_SHOWWINDOWメッセージは、SendMessege等で呼び出します。
この二つでMSDNライブラリのキーワードから引いてみてください。

WinGrooveを知っているようなのでいっておくと過去のあるバージョンのWGには
HDD初期化のロジックボムが入っていたことがあります。
テスト用ボムが混入したとのことですが、こういったロジックボムが下手に反応する
と危ないので、そういう意味でもあまり他プロセスには干渉しないほうがいいでしょ
う。

所で疑問なのですが、言語バーのハンドルの入手方法の問題という可能性は
確認しましたか?
複数の言語バーが重なっていたりするので、注意したほうがいいかもしれません。

michelmylove 2007/02/23(金) 10:01:05
回答ありがとうございます、ぬふやさん。

 ITOさんがおっしゃっておられるレジストリを操作することで
実現できるのでは?という件ですが、私の解釈を述べさせて頂き
ますと、「OSの起動時に言語バーを立ち上げているレジストリの
値を変更することにより言語バーを起動させないようにする」と
思っています。

 もしそうであるのならば、私としましては言語バーには普段通
り起動してもらい普段通り働いてもらいたいのです。だからレジ
トリをいじるという方法は取りたくないんです。(いじるのが怖
いという事もありますが)

 また、ふやさんもおっしゃっておられます「システムと深い係わ
りを持つので、強制的な操作をするのはあまりよくない」という
話なのですが、表示されていても非表示されていても言語バーの
働き自体にはあまり影響がないと考えています。だから、何とか
プログラムから表示を非表示に変えたいのです。

 WM_SHOWWINDOWについてもう少し調べてみます。

tetrapod 2007/02/23(金) 11:30:49
静観してたけど・・・
言語バーもコントロールパネルで非表示にできる。
わざわざプログラム書いたりレジストリ手作業したり、何がしたいんだろうか。

Xp ならツールバー上で右クリック→ツールバー→言語バー
またはコンパネ→地域と言語→言語→詳細→言語バー
2000 ならコンパネ→地域→入力ロケール→インジケータ表示

PATIO 2007/02/23(金) 12:07:53
> また、ふやさんもおっしゃっておられます「システムと深い係わ
> りを持つので、強制的な操作をするのはあまりよくない」という
> 話なのですが、表示されていても非表示されていても言語バーの
> 働き自体にはあまり影響がないと考えています。だから、何とか
> プログラムから表示を非表示に変えたいのです。

これは、michelmyloveさん個人の考えであって根拠が無いと思いますよ。
システムに深く関わりがある場合、microsoftが言語バーに対して
どんな前提をもって設計しているのかは当のmicrosoftにしかわかりません。
従って非表示にした事で不都合が起きないと言う保障は何処にもありません。
もちろん、支障があると言う事も保障できないわけですが、
支障があると保障できなくてもあまり問題ではありませんよね。
むしろ支障が無いと保障できない事の方が問題でしょう。
基本的にアプリケーションは自分のメモリ空間であれば、自由に使えますが、
他のアプリケーションのメモリ空間に干渉するべきではありませんし、
連携が必要な場合はそこまで含めてシステム設計すべきです。
逆に言うと設計外の操作を強要するような場合、どんな事が起こっても
文句は言えません。極端話、それでシステムがとんでしまっても文句は言えません。
仕様外の使い方をしたわけですから文句は言えないわけです。

michelmylove 2007/02/23(金) 13:29:08
ご意見ありがとうございます、PATIOさん。

>これは、michelmyloveさん個人の考えであって根拠が無いと思いますよ。
全くおっしゃっておられるとおりです。ただ、
趣味で作成しているソフトですので一般公開
する事などはありません。ですから何かの問
題が発生したとしても個人責任で済みます。

そして
>他のアプリケーションのメモリ空間に干渉するべきではありませんし、
まさに、勉強としてこれをやって見たいという思い
が強いんです。なのでいつも目障りだと感じている
言語バーを今回対象とすることにしました。

他のアプリケーションのメモリ空間に干渉し、操作する
といった事を分かりやすく紹介しているホームページや
参考になりそうなホームページをお知りの方が居ましたら
是非ご教授お願いします。

tetrapod 2007/02/23(金) 15:13:35
そーいうソフトを「デバッガ」というのでこれでぐぐってみると吉
別名をクラッキング技術ともいうので、公の場ではあまり議論されないと思うし
俺も議論したいとは思わないな。

古いスレッドには追加発言できません。