スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
過去スレ、関連リンクは
>>2-5 くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(
http://msdn.microsoft.com )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
漏れてないよな?
>1 乙カレー
── │ │ ── │ │ ──
── │ │ │ │ ── │ │ │ │ ──
/ ̄/ /  ̄/  ̄/ / / / ̄ / ̄  ̄/ / ̄/ / ̄/ / / / / ̄  ̄/  ̄/  ̄/ / ̄/ / / ̄/.  ̄/ .  ̄ .  ̄  ̄  ̄  ̄  ̄
所々に見えるポチポチは何ですか?
/ ̄/ /  ̄/  ̄/ / / / ̄ / ̄  ̄/ / ̄/ / ̄/ / / / / ̄  ̄/  ̄/  ̄/ / ̄/ / / ̄/  ̄/  ̄  ̄  ̄  ̄  ̄  ̄
>>10 スレ違い。ちゃんと意味があるからよそで聞いてきなさい。
常時点灯だろ
Cスレから誘導されてきました VC6で gettimeofday はどこに入ってるのでしょうか? 一応VC98\Include以下は検索ソフトで調べました
prototype宣言を探してるのか、関数本体を探してるのか
Cドライブと見た
誘導した奴は馬鹿なのかと一瞬思ったが、もしかしたらちゃんと考えがあるのか。
ついでに
>>17-18 の流れも分からない。
>>16 移動するなら元スレに一言書いた方がいんでない。
VC6には無いよ。このスレ的にQueryPerformanceCounter、timeGetTime辺りを使いなされ。
じゃなきゃcygwin辺りを使うとか。
20 :
16 :2006/01/08(日) 19:20:32
ありがとうございます
SysHeader32 SysListView32
Header Controlsのどこかにあると思って探してるんですが・・・
ありがとう。
29 :
デフォルトの名無しさん :2006/01/09(月) 17:12:45
APIを使用してIMEモードを制御する
--------------------------------------------------------------------------------
'標準モジュール内
Option Explicit
'iMEの状態を制御する
Public Declare Function ImmAssociateContext Lib "imm32.dll" (ByVal hwnd As Long, ByVal himc As Long) As Long
'IMEモード定数
Public Const IME_CMODE_ALPHANUMERIC = &H0
Public Const IME_CMODE_CHARCODE = &H20
Public Const IME_CMODE_KATAKANA = &H2 ' only effect under IME_CMODE_NATIVE
Public Const IME_CMODE_ROMAN = &H10
'
'対象コントロールのGotFocusイベントに記述する
Private Sub Text1_GotFocus()
Call ImmAssociateContext(Me.Text1.hwnd, IME_CMODE_ALPHANUMERIC)
End Sub
ググったら、このようなコードを見つけました。(
ttp://homepage2.nifty.com/Dee/vb/tips/vb/imemodebyapi.html )
変換モードを特定のセルにて「人名/地名」にしたい場合、上記をどのように変更したら良いのでしょうか?
自分でそのAPI周りをMSDN等で調べようという気の無い者に教えることなど何も無い
セルってことはVBAか? なんにしてもここはコード丸投げなんてのが通るスレじゃないし、 MSDNも調べない奴に丁寧に教えるスレでもない。 半月勉強して出直してこい。
32 :
デフォルトの名無しさん :2006/01/09(月) 20:53:13
質問です。環境は、XP、Visual C++ .NET です。 C++ 相談室から誘導されてきました。 CreateWindow にてウィンドウを作成したのですが、ウィンドウが反応しません。 具体的に言うと、[×] や [_] にマウスカーソルを当ててもへこむ様子もなく(当然クリックしても何もおきない)、 キャプションを D&D してもウィンドウが動きません。 考えられる原因はないでしょうか。 ツールバーから「閉じる」を選んだり、Alt+F4 での処理は受け付けれています。 また、[×] をクリックしたとき、WM_LBUTTONCLICK は飛んできているようです。 処理全体としては、まず不可視のメインウィンドウを作成し、 CreateWindow 終了後、そのウィンドウを親とする別の可視ウィンドウを作っています。 ためしに親ウィンドウを可視にしてみましたところ、親ウィンドウは反応しました。 が、子ウィンドウが反応しません。 ウィンドウは全てクラス化してあり、単純な処理ではないので、ソースを全て晒すのは困難です。 必要と思われる部分を晒します。 (続く)
33 :
32 :2006/01/09(月) 20:54:03
// Parent.cpp // 親ウィンドウクラスの設定 WNDCLASSEX wc; wc.cbSize = sizeof(wc); wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = AppProcPre; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstApp; wc.hIcon = NULL; wc.hIconSm = NULL; wc.hCursor = NULL; wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "hogeparent"; if (!RegisterClassEx(&wc)) return false; // ウィンドウの構築 hWndApp = CreateWindow(wc.lpszClassName, "Parent", WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstApp, this); if (hWndApp == NULL) return false;
34 :
32 :2006/01/09(月) 20:54:35
// Child.cpp // 子ウィンドウクラスの設定 WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WindowProcPre; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = GetInstance();// GetInstance: インスタンスを取得するグローバル関数 wc.hIcon = NULL; wc.hIconSm = NULL; wc.hCursor = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); //wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = NULL; wc.lpszClassName = "hogechild"; if (!RegisterClassEx(&wc)) return false; // ウィンドウの構築 hWnd = CreateWindow(wc.lpszClassName, "Child", WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, GetAppWnd(), NULL, GetInstance(), this); // GetAppWnd: 親ウィンドウのハンドルを取得するグローバル関数 if (hWnd == NULL) return false; return true;
35 :
32 :2006/01/09(月) 20:55:11
これらの処理は仮想クラスで行っており、 ウィンドウプロシージャでは、GetProp/SetProp によるオブジェクトの結びつけ、 継承先クラスのウィンドウプロシージャの呼び出し、など複雑な処理を行っていますので、 全体を晒すのは困難です。 ですが、WM_CREATE の返答としての処理は何も行っておりません。 その他も、WM_DESTROY などの特殊処理を除いて、全て DefWindowProc の処理が行われています。 以上です。長々と申し訳ございませんが、よろしくお願いします。
全部晒すのは困難ですって、固めてロダにUPするという考えは無いのか ってかそんな、登録部分だけ出されてもわかりゃせんわ
全てDefWindowProcの処理が行われていますって言うけど そういう現象が起きてる以上、「全て行われて」はいないってことだよ 本当にDefWindowProcに行ってるなら、×押しゃ消えるし_押しゃ最小化される
>>35 ふと気になったが
メッセージ処理にWM_SYSCOMMAND入れてないか?
40 :
32 :2006/01/09(月) 21:33:00
>>39 それは入ってないです。
>>38 DefWindowProc まわりを見直してみます。
解決しなかったらまとめてうpしてみます。ありがとうございました。
exeを起動するさい、CPU一個だけ利用するようにして起動できないでしょうか? win2000です。
わけわからん。
43 :
41 :2006/01/09(月) 21:55:28
タスクマネージャのプロセスの右クリックの「関係の設定」で、 CPU0のみチェックがついてる状態で起動できないでしょうか? という意味です。わかりにくくてすいません。 CPU1個しかない場合は「関係の設定」はありません。
44 :
sage :2006/01/09(月) 21:59:12
IEコンポーネントでIHTMLTableのput_borderには、どのような値を渡せば良いのでしょうか? VARIANTでbstrValだとは思うのですが、どうしてもうまく行きません。 開発環境はVC6です。
>>43 できる。
SetThreadAffinityMaskかなんかで調べてみればいい
>>45 ありがとうございます。調べてみます。
IMEを使った処理で WM_IME_COMPOSITIONで処理をさせずに、WM_IME_CHARでWParamの値を見ると、 なぜか、Shift-JISコードが返ります。WindowはIsUnicodeWindowでTrueを返すのに、 なぜか、UnicodeじゃなくShift-JISが返ります。 単純なプログラムを作って、同じことすると確かにWM_IME_CHARのWParamはUnicodeで 自分のプログラムがどっか悪いと思うのですが、これ以上、どこを重点的に 調べればよいか皆目検討がつきません。 どうぞ、みなさんの知恵をかしてください。
自分のプログラム と 単純なプログラム の違いを減らしていけばいいんじゃねえの?
テキストファイルが何行あるのか調べる方法を教えてにょ
$ wc -l hoge.txt
>>49 APIだけでは難しい。
#まぁ、自分で数えろと。
>>50 いくらなんでもこのスレでそれはないだろう。
>>48 ありがとうございます。ですが、自分のプログラム100行、ライブラリ1万行以上。
で、そのライブラリはMFCのように、フレームワークの上に構築された、コントロール
でして。単純に削除できないんです。ですが、やっぱそれしかないですよね。
私もそんな気がします。
100行って、随分小さいのな。 1万行以上ってのも、そう書く以上は2万行には満たないんだろ。 その程度ならわけないやん。
>>53 >>47 です。はぁ、やっとわかりました。ちなみに、100行ってのは、単純にRegisterClassやCreateWindow
でウィンドウを作成して、WM_CHARやWM_IME_CHARやWM_IME_COMPOSITIONを捕まえて
そのwParam, lParam値をリストボックスに表示するだけでして。
で、原因なんですけど、問題のプログラムはUnicodeウィンドウとAnsiウィンドウが混在してて、
WH_GETMESSAGEでフックをしているんですけど、その時の処理がおかしかったようです。
「SetWindowHookExWでフックをインストールすれば、そのフックプロシージャにはAnsiウィンドウのメッセージだろうが
すべて、Unicode値が渡される前提でプログラムが作られていました。」
Windowsややこしい。
VC++6 で XP, 2000 をターゲットに、リッチテキストファイルに画像処理を加えて表示する プログラムを作成中です。 初めての VC だったので難儀し、ほぼ9割がたできたのですが、1点だけ分からずに 困っています。 RTFファイルをメタファイルとして再生・表示まではできるのですが、これをビットマップ (DIB, DDB いずれでも可)に変換するには、どのようにしたら良いのでしょうか。 画像処理の関係で、どうしてもビットマップにする必要があるためです。 キーワードやポインタだけでも良いので、ご存知のかたがいらっしゃったら教えていただければ助かります。
>>55 CreateDIBSectionでHBITMAP作ってHDCに関連付けて、
そこにメタファイルを再生すれば良いんじゃない?
57 :
デフォルトの名無しさん :2006/01/10(火) 09:43:14
ダイアログのハンドルから、そのダイアログがモーダルかどうか 知る方法はありますか?
58 :
デフォルトの名無しさん :2006/01/10(火) 10:47:08
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win132.html このページのEnumFontFamiliesEx()関数についてなんですが
上記ページをトレースしてコンパイルしてみた場合
BCC5.5.1ですと第3引数は(int)として定義されてるのでunsigned longは渡せないと吐いてくれます
そこでVC6.0でも同様にトレースしてみたんですが同じようなエラーを吐いてくれました
MSDNによるとコールバック関数へのアドレスを、とあるのですが・・どうすればいいでしょうかorz
参考にはならないと思いますがOSはXPhome+sp2の32bit環境です
てめぇはキャストもできんのかカス
いやキャストしたんですけどね なぜかそのキャストが拒まれてしまうんですよ
61 :
デフォルトの名無しさん :2006/01/10(火) 10:52:14
>>56 ありがとうございます。さっそく試してみます。
62 :
デフォルトの名無しさん :2006/01/10(火) 10:54:26
よぉカス
どこに第3引数がintと書いてあるよカス
64 :
59 :2006/01/10(火) 10:59:58
>>60 VC++6.0でやったが、適切にキャストしたら普通にできたわけだが
だからキャストもできんのかと言っている
>>58 エラーメッセージの解釈が間違っている。
問題のソースやエラーメッセージをそのまま載せない事が間違っている。
>>58 はて、手元のMSDNには
int CALLBACK EnumFontFamExProc(
ENUMLOGFONTEX *lpelfe, // 論理的なフォントデータ
NEWTEXTMETRICEX *lpntme, // 物理的なフォントデータ
DWORD FontType, // フォントの種類
LPARAM lParam // アプリケーション定義のデータ
);
と書いてあるのだが。
サイトを鵜呑みにするだけでなく、MSDNもきちんと読んだらどうかね。
>>54 > Ansiウィンドウ
変なオレ用語使うな。
なんだよ、Ansiウィンドウって?
69 :
66 :2006/01/10(火) 12:57:59
>>68 あれ、>63と同じこと言ってるだけの積もりなんだが。
MSDNにはDWORDで宣言しろと書いてあるのに、件のサイトのソースにはintで宣言されているから
型が違って呼び出せないと言うエラーが出ているって話ではないのかな?
これが勘違いなら、暫くこのスレに書き込みするの止めるよ。
>>67 >>54 ですが、IsUnicodeWindowがTrueになるWindowをUnicodeウィンドウ、
もう一方をAnsiウィンドウと呼んでみただけです。
Win32のAPIもUnicode版とAnsi版の2種類があるって表現されていたもので。
Ascii の A じゃないか?
>>69 キミが言ってるのはコールバック関数の、EnumFontFamExProcのこと
>>58 が言ってるのはEnumFontFamExProcのアドレスを渡す、EnumFontFamiliesEx関数の第3引数のことである
実際に、
>>58 のアドレスにあるソースをそのままコンパイルすれば、
EnumFontFamiliesExの呼び出しの所で引数の型エラーが出る
>>71 まぁなんだ、AnsiウィンドウとかUnicodeウィンドウとか言う呼び名があるかは置いといて、
AsciiのAなわけがないんだが
MSDNにもちゃんと、
英語版:Implemented as Unicode and ANSI versions on Windows NT, Windows 2000, Windows XP
日本版:Windows NT/2000 は Unicode 版と ANSI 版を実装
ってなように、ANSIと書いてあるわけで
OK?
こまっています・・・ Win2000SP4で権限チェックするモジュールがあります。 これは、NetUserGetLocalGroups()でログインしているユーザが所属しているローカルグループを 一覧して、「Administrators」グループに所属しているか確認しています。 ある特定の端末(数台)で、一覧されるユーザが「Users」権限のみになってしいます。 正常な端末では、「Users」と「Administrators」グループが取れます・・・ このAPIは端末の設定か何かで動作が変るものでしょうか??
>>72 EnumFontFomExProcのアドレス渡す引数が
> BCC5.5.1ですと第3引数は(int)として定義されてるのでunsigned longは渡せないと吐いてくれます
ポインタでないって主張してるのか?
どう考えてもコールバック関数の仮引数の問題だろ?
>>75 じゃあ、VC++6.0で仮引数をDWORDで宣言してコンパイルしてみろよ
同じエラー出るからよ
まぁ、
>>58 もエラーの内容を取り間違えては居ると思うんだけどな
>>73 > 英語版:Implemented as Unicode and ANSI versions on Windows NT, Windows 2000, Windows XP
> 日本版:Windows NT/2000 は Unicode 版と ANSI 版を実装
> ってなように、ANSIと書いてあるわけで
その一文だと「Windows NT, Windows 2000, Windows XP」には、
Unicode 版と ANSI 版の二つを実装している、としか取れないね。
# ソースの URL も(ry
79 :
!72 :2006/01/10(火) 17:05:27
>>76 それ以前に、EnumFontFamiliesEx()の第3引数は「FONTENUMPROC」型、
と書かれているいるんだから FONTENUMPROC 型で渡すのが正当だろう。
# もちろん、引数で指定したプロシージャは、
# FONTENUMPROC 型と矛盾しない定義にすることも必要だな。
ソースのURLもって、はっきりMSDNと書いてるのに何を言ってるのか・・・
81 :
デフォルトの名無しさん :2006/01/10(火) 17:28:36
質問させてくだちぃ。 タイマーを作りたいと思ってます。。 ウィンドウは表示させずに数字のみを画面に表示させたいのですが、 その場合、内部で動的に画像を生成しリージョンを適用する ・・・という方法しかありませんよね? ちょっと速度の面で不安があるのですが、 それは仕方ないと割り切るしかないでしょうか?
NULL_BRSUH に TextOut じゃだめか?
>>81 起動時に数字の形したリージョン作ったら?
ディスクトップのHDCに直接描画と言う方法も(ry
>ディスクトップ >ディスクトップ >ディスクトップ
ノー!デェィスクトァップゥ
88 :
87 :2006/01/10(火) 20:22:28
我ながらあきれた
こやつめ
90 :
66 :2006/01/10(火) 21:30:10
判った。
私は正しくコールバック関数を定義すれば引き数は自ずとキャストの必要がないだろうと言いたかったのだが
それが伝わってなかったのだな。
>>72 ということで、>58でエラーになることは承知しているのですよ。
>>76 で、どうすればいいと言いたいの?
>>58 改めてもう一回。
サイトのソースにのみ頼らずMSDNを読めばサイトのソースの引き数の型が間違っていることが判る。
それを修正してコンパイルしてみたまえ。
ダメだこいつ
自分だけは間違ってないという困ったちゃんなんだよ、きっと
>>82-85 みなさんありがddです
環境はWin2000なんで、せっかくだから
レイヤードウィンドウとやらを試してみようと思います!
これだと負荷をかけずに希望のものが作れそうです。
いい情報ありがとう〜。
ディスクトップに直接描画はキビシス...(^ω^;)
94 :
58 :2006/01/10(火) 22:46:53
皆さんすみませんでしたorz 今一度注意しながらソースを見たのですが 指摘の通りコールバック関数の引数についてのエラーだったようです。すみません そこで以下のように修正したのですが・・・ 3 番目のパラメータは int (__stdcall *)(const tagLOGFONTA *,const tagTEXTMETRICA *,unsigned long,long)型として定義されているので int (__stdcall *)(tagENUMLOGFONTEXA *,tagNEWTEXTMETRICEXA *,int,long) 型は渡せない そのままですと上記のエラーを吐くのでコールバック関数の引数をDWORDとしてコンパイルしてみました 3 番目のパラメータは int (__stdcall *)(const tagLOGFONTA *,const tagTEXTMETRICA *,unsigned long,long) 型として定義されているので int (__stdcall *)(tagENUMLOGFONTEXA *,tagNEWTEXTMETRICEXA *,unsigned long,long) 型は渡せない と吐かれてしまいます。モウダメダ ... (´・ω・`)
>>94 BCC付属のヘッダが間違っているのでは?
ううんBCCでもVC6.0でも同じ様なエラーを吐いてコンパイルが出来ませんでした・・・
だから言ってるじゃねぇか、int、DWORDだけの問題じゃねぇって
面倒だから(FONTENUMPROC)付けて強制的にキャストしとけ
そうすりゃエラーでねぇからよ
>>95 VC++でも同じだよ
はい、コールバック関数へのアドレスを (FONTENUMPROC)としてキャストしたらコンパイルでき、期待された動作をするプログラムが作成できました。 いろいろとすみませんでした
キミよりむしろ、わかっても無いのにゴタゴタ言ってたバカどもが迷惑
どうでもいいけど、第3引数はintとか素で言ってるのすげえよな。 関数ポインタ知らないのかよ。 なんかWin32API以前の問題だな。
>>100 コールバック関数の第3引数はあのサイトではintとなっていたからごっちゃになったんだろう。
MSも意地でヘッダ直さんのかな
うむ
>>77 古いけど、MSDNのヘルプにのってるサンプルには
// Register an ANSI window class.
RegisterClassA(&AnsiWndCls);
// ANSI Window Procedure
LONG AnsiWndProc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
// Unicode Window Procedure
とも書いてある。
指定時刻にスタンバイから復帰させる方法を教えてください
>>100 エラーにはFONTENUMPROC型とかじゃなく、int (const struct〜って出るから、
そこのintを見てintって言ってたんじゃないかね
>>105 ねぇよ
>>105 タスクスケジューラ
wake on lan
>>105 CreateWaitableTimer
SetWaitableTimer
109 :
デフォルトの名無しさん :2006/01/11(水) 08:11:20
BitBltのDIB版はないでしょうか。 SetDIBitsToDeviceが近いと思いますが、 ラストオペレーションコードがありません。 StretchDIBitsで先、元のサイズを 同じにするという方法もあると思いますが、 BitDIBitsみたいなのが別にあるなら教えてください。
DIBをHDCにSelectObjectしてBitBltすればいいじゃん?
DIBをSelectしてじゃ語弊がありすぎるな DIBからHBITMAP作ってSelectしてBltすればいいじゃん
112 :
109 :2006/01/11(水) 08:48:20
なるほど、分かりました。 ありがとうございます。
113 :
デフォルトの名無しさん :2006/01/11(水) 16:36:35
質問させてください。 ネットワークに接続するnetwork.dllを作って、loadLibraryを呼び出して明示的にロードすると、 net.dllがインポートしているWS2_32.dllなんかも一緒にロードされてますよね?、 その後FreeLibraryを呼び出すとnetwork.dllのマッピングは解除されるんですが、network.dllが 使ってたWS2_32.dllなどはマッピングが解除されないまま残ってしまっています。 network.dllのマッピングが解除された時点必要なくなったDLLのマッピングをすべて解除すること はできないのですか?
114 :
113 :2006/01/11(水) 16:39:04
三行目のnet.dll→network.dllです。もうしわけございません。。
TCHAR関連について質問です。 tchar.hをインクルードしない場合 TCHAR , TEXTマクロはコンパイルできるんですが _TCHAR , _TEXTマクロ ,_Tマクロ だとエラーになります _ありでもなしでも意味は変わらないと思うのですが どうしてこのような違いがあるのでしょうか?
自分で定義を追跡して見るくらいしろや
つーか、tchar.hをインクルードするしないでコンパイル可否が変わるってだけで十分想像できそうなもんだがな
まぁ、言ってしまえば、 _ 付きのヤツはTCHAR.Hで定義されていて、 _ ついてないヤツはデフォルトでインクルードされるヘッダに定義されてるから 今度からちったぁ自分で調べろよ あと、_ありなしで意味は変わらないと思うとか、本気で思ってるとそのうち痛い目見るぞ 言葉の意味とプログラムの意味は別物だ
>_ありでもなしでも意味は変わらないと思うのですが #define _true 0 とか?
> デフォルトでインクルードされるヘッダ いやその説明もどうかと
typedefで型定義されてたらダメだな
だが実際、windows.hをインクルードすれば普通に入ってるヘッダだしな
たしかにこのスレではWindows.hをデフォルトと書きたくなるのはわかる。
124 :
デフォルトの名無しさん :2006/01/11(水) 23:27:22
ファイルをコピーしながら、プログレスバーの値を増やしていきたいのですが、 コピーを行っていると画面が更新されません。 UpdateWindow、Sleep(1)を入れても更新されないみたいです。 ファイルをコピーしながらプログレスバーを動かすソフトでは、マルチスレッド で実行しているのでしょうか? マルチスレッドはよくわからないので、その他にやり方があれば教えてください。 よろしくお願いします。
Win32APIを前提に話す以上Windows.hはデフォルトと思うのが普通だろうな
>>124 ちょっとづつコピーしながら間に表示したら?
Windows.hじゃなくてwindows.hだと言いたくなりつつ Windowsならどっちでもアクセスできることにぐんにょり
ファイルシステムで大文字小文字区別するのはうざすぎ
ウニ糞を馬鹿にするなっ!
>>126-127 ありがとうございます。
UpdateWindow(hWnd);
GetMessage(&msg, NULL, NULL, NULL);
TranslateMessage(&msg);
DispatchMessage(&msg);
Sleep(1);
としたら、コピーしながらでもプログレスバーは表示されました。
ウィンドウがなぜか動かなかったりしますが、また調べてみます。
ちょwwwwwwwwww
>ウィンドウがなぜか動かなかったりしますが >ウィンドウがなぜか動かなかったりしますが >ウィンドウがなぜか動かなかったりしますが >ウィンドウがなぜか動かなかったりしますが >ウィンドウがなぜか動かなかったりしますが >ウィンドウがなぜか動かなかったりしますが >ウィンドウがなぜか動かなかったりしますが
ウィンドウズがなぜか動かなかったりします どうすればいいですか。
死ねばいいと思うよ
ウィンドウが動かんぐらいなんだ 近頃の若いモンは我慢を知らん
そうだそうだ おれなんか×ボタンがきかん
>>135 進捗率が変わったとき、progress bar の項目に新しい値を PBM_SETPOS で
セットするだけで表示が変わらない?
後、残り時間など変えたいなら計算して、表示個所に SetDlgItemText() して
hDlg を InvalidateRect() する。
中止ボタンがあるなら PeekMessage() で ボタンの項目(GetDltItem(hDlg, IDCANCEL)などで
取る)に LBUTTONDOWN があるか見る位で動いているけどなあ。
これらは、どこかにサンプルがあったのを真似しただけだが。
アンカーにテラワロス
>>124 、
>>139 メッセージポンプすら理解していないのに、
「Windowsプログラムが出来ます。」
とか、得意げに言ってそうだな。
>>125 その理屈は変だろ
おまけに、デフォルトでインクルード「する」なら良いんだろうが、「される」だとなんかアレな感じがするw
どう変だ?
>>142 たぶんIDEのウィザードに頼りっきりなんだろうな
>>142 でも、日本語的には「する」は能動的な行動を表すから、デフォルト
で「する」はちょっと違和感がある。
>>145 まぁ、それは主語に何を置くかしだいじゃね?
日本語はよく主語省略されるから。
Windows.hを主語に置けば、「される」
「する」場合の主語はなんだろう、「統合開発環境が」とか、そんな類の。
いいの思いつかないけど。
まぁ、この場合、話題の中心がWindows.hだから、それを主語にするのが自然かな。
って、ことで「される」に決定だ。フォー。
ハゲワロタ、さりげなく出てきてるがおまえ当事者だろw >Windows.h まぁこんなので長文書いてる時点で当事者なんだろうけど
Windows.hと書く素敵マンが二人もいたと。
そもそも最初から
>>118 >>125 がデフォルトの意味を間違えてるんだから、以後は無意味だな。
VC2003です。 ダイアログの上にエディットが貼りつけてあり、 そのエディットの上に(ダイアログが親の)リストボックスを 表示したり非表示にしたりするのですが、 リストボックスがマウスの操作を受けず エディットにフォーカスが行ってしまいます。
そうです。
OSはWindows XP SP2、開発環境はVisual C++ 2005 Express Edition 日本語版なんですが、 PTSTR pszErrMsg; (略) FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM , NULL , GetLastError() , 0 , pszErrMsg , 0 , NULL ); (略) エラーメッセージを取得することができません。デバッガで調べると、ポインタはNULLを指してました。 どこが間違っているのでしょうか。
(LPTSTR) &pszErrMsg
あるアプリの右クリックショートカットメニューのチェックの有無はを調べたいのですが、 ショートカットメニューのハンドルはどのようにしたら取得出来るでしょうか? いろんなウィンドウハンドルにgetmenuしたり、メインウィンドウのメニューのハンドルと ショートカットメニューのIDでgetmenuiteminfoを実行してみたりしましたが駄目でした。 ちなみにそのショートカットメニューからのwm_commandはTPUtilWindowクラスの ウィンドウが受け取っているようです。 よろしくお願いします。
155 :
152 :2006/01/12(木) 17:48:50
変数の型自体を変えて、 LPTSTR lpszErrMsg; (略) FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM , NULL , GetLastError() , 0 , lpszErrMsg , 0 , NULL ); (略) こうしました。でもまだ駄目です。どうすればいいですか?
FormatMessageでぐぐれば最初のページにサンプルが出てるからそこをよく読むといい。 処理後、LocalFreeを入れるのを忘れないように。
159 :
113 :2006/01/12(木) 19:34:59
(。´Д⊂) うぅ…。
150です。 すみません。 どうすればいいのでしょうか?
161 :
152 :2006/01/12(木) 19:52:22
>>157 こうですか?
PTSTR pszErrMsg;
(略)
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_IGNORE_INSERTS |
FORMAT_MESSAGE_FROM_SYSTEM ,
NULL , GetLastError() , 0 , (LPTSTR)&pszErrMsg , 0 , NULL
);
(略)
これでも駄目でした。
>>161 君のコードはよく見てないけどヘルプにサンプル載ってるからコピーしてくれば
164 :
152 :2006/01/12(木) 20:31:41
>>162 解決しました。ありがとうございました。
74です。自己解決しました。すれ汚しすまそ。
キーボードショートカットが無いアプリケーションに、キーボードショートカットをつけたいのです。 そこで別のアプリケーションからメッセージをポストしてやるのかなーと思って 似たようなアプリを調べたところ、キーコマンドをそのアプリで受け取って、コントロールしたい アプリにWM_MOUSEMOVEなどのメッセージをポストしたりして、右クリックメニューに対処してました。 これって何かほかに良い方法ありそうな気がするのですが、アドバイス願います。
170 :
デフォルトの名無しさん :2006/01/13(金) 01:10:29
editboxを一番下の行に移動させたいのですがどうしたらよいのでしょうか? SetWindowText(GetDlgItem(IDC_EDIT1),"任意"); SDK でやっていますのでよろしくお願いします。 SDKでエディットボックスの任意の行に移動させる関数と 今エディットボックスが持っている行数を取得する関数があるとできると思うのですが・・ MSDNライブラリGOOGLE活用しましたが、検索技術が未熟なためか見つけることができませんでした。 どなたかよろしくお願いします。
先越されちゃったけど、カーソル移動するならEM_SETSELね。
何言ってんの、お前ら? 「editboxを」「移動させたい」ならMoveWindowとかSetWindowPosだろ。
174 :
デフォルトの名無しさん :2006/01/13(金) 01:26:52
>>173 すいません。
質問の仕方が悪かったです。申し訳ないです。
>>171 ,172
EM_SETSELという関数を使うのですね?今から参照のサイトを見てやってみます。
Win95の質問だめですか?
177 :
デフォルトの名無しさん :2006/01/13(金) 01:33:24
>>171 ,172
ありがとうございます。
まとめて
SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_LINESCROLL, 0, SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_GETLINECOUNT, 0, 0));/* 行数分スクロールさせる */
を追加したらできました。
ありがとうございます。相当感謝してます。
フォルダ状態の保存ができないぽい。98では「フォルダ状態を全てに・・」みたいな項目があったけど・・
>>177 なぜ同じ GetDlgItem() を二回も発行するのだ
無駄はいかんぞ
180 :
デフォルトの名無しさん :2006/01/13(金) 01:49:42
>>179 HWND hWnd = GetDlgItem(hWnd,IDC_EDIT1);
としてコードを短くしたほうがいいですかね?
ふと思ったのですが
SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_LINESCROLL, 0, SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_GETLINECOUNT, 0, 0));/
と
教えてもらったサイトにある
HWND hEdit = GetDlgItem(hWnd, IDC_EDIT);
int nLines = SendMessage(hEdit, EM_GETLINECOUNT, 0, 0);/* エディットボックスの行数を取得 */
SendMessage(hEdit, EM_LINESCROLL, 0, nLines);/* 行数分スクロールさせる */
とでは
どちらが処理を軽くできるでしょうか?
181 :
180 :2006/01/13(金) 01:50:56
>HWND hWnd = GetDlgItem(hWnd,IDC_EDIT1); すいません。hEditでした。
>>180 通常2番目だろうね。
コンパイラには、GetDlgItem(hWnd, IDC_EDIT)が2回同じ値を返すかどうかは
予測できない(つまり律儀に2回関数を呼びだす)けれども、変数は前後を見て
使われていなければレジスタに割り当てたりできるし。APIの呼び出しは結構
オーバーヘッドでかい。ただ、そこまで気にする内容かどうかは謎。
SendDlgItemMessageってのもあるわけだが。
184 :
デフォルトの名無しさん :2006/01/13(金) 02:00:29
>>182 回答ありがとうございます。
二回呼び出すのをやめ
>>179 さんの注意どおり無駄を省くことにします。
ありがとうございました。
ウィンドウズ95で>>178はできないですか、というかすれ違いなら止めよ
187 :
154 :2006/01/13(金) 03:41:48
すいません、自己解決しました。 やっとすっきりした・・・
質問です。 WinMain()のHINSTANCEを渡せば、いつでもどこでも メインウィンドウのハンドルを得るAPIがあったと思うのですが、 ど忘れしてしまいました orz HWND hwMain; hwMain = GetHWND(hInstance); なんかこんな感じのAPIだったと思うのですが、 どなたかご存知ありませんか? ググりまくっても出てこないよ。 (T_T)
>>188 まず、「メインウィンドウ」から説明して貰おうか?
190 :
188 :2006/01/13(金) 16:38:57
あ、ごめ。えーと、親ウィンドウのつもりでした m(__)m ちなみにhInstanceはWinMain()の第一引数です。 確かこんな関数があったと思うんだけどなぁ。
GetParent? でも、HINSTANCE関係ないしなー
192 :
188 :2006/01/13(金) 16:46:11
>>191 ググるとそれがよく引っかかりました orz
確かどっかのサイトで見たと思うんですが・・。
スレ違いかもしれませんが、ご存知の方教えてください。 マウスのプロパティで、ポインタのデザインを変更する 事ができますが(3Dブロンズや3Dモノクロなど)、これを 変更するためのAPIとかって存在するのでしょうか?
レジスタ弄るAPIじゃね?
ウィンドウハンドル使ってインスタンスハンドル取得するのは知ってるが その逆なんて知らないなぁ そもそも自プログラムならメインウィンドウのハンドルが分からないわけないし、 他プログラムのウィンドウならFindWindowで探すもんだと思うしなぁ
>>194 レジストリのどこを変更すれば設定が変わるかってのは
わかってるんですが、項目が多くて一気にできないものかと。
198 :
188 :2006/01/13(金) 17:21:55
>>195 ありゃ、私が見たのはそっちだったのかなぁ。
うーん。もうちょっとググってみまっす。。
目的を明確にすればそんなAPIが必要なのかわかるんじゃないかな。
>>190 > 親ウィンドウのつもりでした m(__)m
何から見て親なんだ?
そもそも、一つのプロセスには複数のトップレベルウィンドウを作れるわけだが、
複数の場合はZオーダーがトップのものを取得すればいいのか?
# ウィンドウがない場合もあるが、これは無効ハンドルでいいだろう。
悪いがメインで十分通じる
バカだからだな。
>>202 ならばさっさと代替の言葉を示せよ、読解力のない揚げ足取り君w
204 :
デフォルトの名無しさん :2006/01/13(金) 20:17:29
GetModule()
痛いところ突かれたからってそうムキになるなよw
さすがバカじゃ無い方、1時間も悩んで思いつかなかったのねw つか202の時点で失笑ものだが
スレッド関数内で、処理中である旨のメッセージのウィンドウを表示させたいのですが、 以下のように、ウィンドウ生成→ウェイト→処理→ウィンドウ破棄という処理を書いても、 実際にはメッセージのウィンドウが表示すらされません。 また、Sleep値を大きくしても効果がありませんでした。 原因を宜しければ教えてください。 ------------------------------------------------------------------------------ HINSTANCE AppInstance; // インスタンスハンドル HWND hWnd; // 親ウィンドウのハンドル DWORD WINAPI ThreadFunc(LPVOID lpParam) { HWND message_window; RECT rect; GetClientRect(::hWnd,&rect); message_window = CreateWindowEx(0,"STATIC","処理中です",WS_DLGFRAME | WS_CHILD | WS_VISIBLE, (rect.right+rect.left)/2-100,(rect.bottom+rect.top)/2,200,36,::hWnd,0,::AppInstance,NULL); Sleep(500); // ちょっとウェイトする /* (処理) */ DestroyWindow(message_window); ExitThread(TRUE); } ------------------------------------------------------------------------------
208 :
デフォルトの名無しさん :2006/01/13(金) 22:26:44
Sleep(500)の前後にUpdateWindow(message_window)入れてみれ
209 :
デフォルトの名無しさん :2006/01/13(金) 22:28:01
書き間違いスマソ。 Sleep(500)の前後にUpdateWindow(message_window)入れてみれ ↓ Sleep(500)の前にUpdateWindow(message_window)入れてみれ
どうやったら「前に」と「前後」を書き間違えるんだよw 手書きじゃあるまいにw
211 :
デフォルトの名無しさん :2006/01/13(金) 22:54:09
>>210 別にいいじゃん・・・
気にしてるんだからほっといてよw
212 :
デフォルトの名無しさん :2006/01/13(金) 23:16:41
タスクバーにポインタ持って行くと、ウィンドウタイトルがポップアップしますが、 文字列が長いと、80字位に切り詰まるようです。 これって可変なんでしょうか?可変なら最大文字数を取得する方法ってありますか??
固定
セマフォとミューテックス以外で スレッド専用に特化した高速な同期化オブジェクトってありますか?
クリティカルセクション
サンクス、思い出した
217 :
デフォルトの名無しさん :2006/01/14(土) 01:31:57
>>217 肝心の「どのように動作がおかしいのか」を書かなくちゃ意味がないと思うが
219 :
デフォルトの名無しさん :2006/01/14(土) 01:35:17
>>218 すいません。
起動すると極端に重くなってコンパイルしたEXEファイルのウインドウが真っ白あるいは
デスクトップの画面をそのまま表示している状態です。
プロセスがいつの間にか100%になっていたりします。
動作はともかくとして、気分の悪くなるソースだな
221 :
デフォルトの名無しさん :2006/01/14(土) 01:39:20
>>220 エラー処理はまだ書いていません。
勉強がてら書いているのでできればアドバイスをもらえたらと思います。
完全にWM_PAINTをポイ捨てしてるように見えるんだが。
223 :
デフォルトの名無しさん :2006/01/14(土) 01:43:03
>>222 WM_PAINTはウインドウの再描画を行うやつだったと思いますが、それを応用してソケットにデータインしたときの処理
を行えるということでしょうか?
224 :
デフォルトの名無しさん :2006/01/14(土) 01:45:23
defaultの所をタイマーで書き直したら?
>>223 defaultでFALSEを返したら?
226 :
デフォルトの名無しさん :2006/01/14(土) 01:48:13
>>224 mixiで質問したときもそのように回答をいただきました。
そのタイマーというのがよく理解できていないため、どの用に記述していいのかよくわかっていません。
MSDNライブラリで見てみたのですが書式は理解できました。
ですがどのようにそれを使えばいいのかわかりません。
できればご教授お願いします。
227 :
デフォルトの名無しさん :2006/01/14(土) 01:50:50
>>225 FALSEに書き直して実行したところ今度は別途用意したソケットで
WSACleanup();
でエラーが出てしまいました。
エラーがでたというのはコンパイルできたのですがデバック処理中にエラーがでたということです。
>>226 たんにSetTimerした後にWM_TIMERを受け取って処理するか
コールバック登録するかってだけだろうに。
PeekMessageの方がいいと思うがな。
229 :
デフォルトの名無しさん :2006/01/14(土) 01:55:16
>>228 すいません。有益なアドバイスのようですが
理解ができないので調べて理解できるように勤めます。
230 :
デフォルトの名無しさん :2006/01/14(土) 02:30:34
調べてみた結果 SetTimerでWM_TIMERを生成する間隔を決めて WM_TIMERが呼び出されたときソケットにデータが入っているかチェックをしたら?という意味だと個人的に解釈しました。 間違い等あれば指摘よろしくお願いします。 調べた結果を元にしてソースを変更してみましたが思ったように前のプログラムに比べて軽快な動作が得られません。 fd_set fds; //fds監視リストを作成 //メッセージの種類に応じて処理を分岐させます。 switch (message) { case WM_CREATE: SetTimer(hWnd,NULL,300,NULL); case WM_TIMER: FD_ZERO(&fds); /* 監視対象のディスクリプタ一覧をゼロクリア */ FD_SET(soc,&fds); /* リスニングソケットを監視対象に追加 */ select(soc + 1,&fds,NULL,NULL,NULL); if(FD_ISSET(soc,&fds)){ //メモリの初期化と文字の表示 memset(sBuff3, 0, sizeof(sBuff3)); recv(soc, sBuff3, sizeof(sBuff3), 0); SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff3); return 0; } return FALSE; case WM_COMMAND: //以下続く どう訂正したらいいのかよろしくお願いします。
>>230 breakぐらいしろと
ぶっちゃけCとWindowsプログラミングの基礎からやり直せ
232 :
デフォルトの名無しさん :2006/01/14(土) 02:35:16
SetTimerの第二引数ってNULLなんか渡していいのか?
selectつかうならタイマーいらんと思うが。
235 :
デフォルトの名無しさん :2006/01/14(土) 02:39:24
>>233 第二因数は大麻の識別子ですよね?やはりTIME.hファイルを作って設定しなければならないでしょうか?
>>234 わたしもそうおもって作っていましたが、思ったような動作が得られず困ってしまい、この板に頼った次第です。
selectの説明読んだ?timeval。 ほかに非同期IOとかもありま。
#define TIMER_ID1 1 でいいと思うお WM_TIMERが来たときにはwParamに識別子が入ってるのでそれで分別するべきだとおもうお 個人的な意見だがコールバックにした方がいいと思うお
× でいいと思うお ○ でいいと思う × それで分別するべきだとおもうお ○ それで分別するべきだとおもう × コールバックにした方がいいと思うお ○ コールバックにした方がいいと思う
239 :
デフォルトの名無しさん :2006/01/14(土) 02:46:55
>>236 セレクトの説明UNIXのやつも同じだと思い、読みました。
ですが記憶があやふやになってしまっているところもあります。すみません。
読み直します。
>>237 親切に設定例まで書いていただきありがとうございます。
wParamで分岐ですね!
unitで分岐していたのでいつまでたってもTIMERを拾わなかったのでしょうか・・
また大漁だな
241 :
デフォルトの名無しさん :2006/01/14(土) 03:00:36
・・・やはり思ったように行きません。 ちょっと挫折です・・
SetTimer(hWnd,TIMER_ID1,300,NULL); じゃないのか?
243 :
デフォルトの名無しさん :2006/01/14(土) 03:14:16
>>242 回答ありがとうございます。
WM_CREATE:
SetTimer(hWnd,TIMER_ID1,300,NULL);
break;
WM_TIMER:
FD_ZERO(&fds); /* 監視対象のディスクリプタ一覧をゼロクリア */
FD_SET(soc,&fds); /* リスニングソケットを監視対象に追加 */
select(soc + 1,&fds,NULL,NULL,NULL);
if(FD_ISSET(soc,&fds)){
//メモリの初期化と文字の表示
memset(sBuff3, 0, sizeof(sBuff3));
recv(soc, sBuff3, sizeof(sBuff3), 0);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff3);
return 0;
}
break;
としているのですが・・デバックでブレークポイントを作成してみているのですが・・switch(UNIT)で全部飛び越して一番下の行まで一気に飛んでいます・・もう挫折です。
プラットフォームSDKのサンプルにソケットの非同期IOの例あるからそれ見とけ。
245 :
デフォルトの名無しさん :2006/01/14(土) 03:18:48
>>244 アドバイスありがとうございます。
サンプルがあるのですね。情報ありがとうございます。
246 :
デフォルトの名無しさん :2006/01/14(土) 03:27:20
やっぱわかんないです。 一日休んで頭すっきりしたところでもう一度取り組んでみようと思います。 そのときまたわからないことがあれば質問させていただきます。 今日は本当にありがとうございました。
やっぱわかんないです ><;
248 :
デフォルトの名無しさん :2006/01/14(土) 04:10:35
>>243 猫C見るかKillTimerとSetTimerについて調べれ
249 :
デフォルトの名無しさん :2006/01/14(土) 04:18:07
250 :
デフォルトの名無しさん :2006/01/14(土) 04:18:57
>>248 KillTimerもちゃんとウインドウ消すときの処理に加えてたんですけどね。
252 :
デフォルトの名無しさん :2006/01/14(土) 04:20:33
253 :
デフォルトの名無しさん :2006/01/14(土) 04:24:35
>>249 俺もそれは気付いていたけど
叩かれそうだから迷ってたんだよ。 テイウカ、 ツッコミドコロ マンサイダヨネ
底引き網漁・・・
困ってることは分かるが何も分かっていないな、ということしか分からない。
255 :
デフォルトの名無しさん :2006/01/14(土) 04:27:06
>>253 突っ込みどころ満載だからこのスレの意味があるってもんだ!!
修正したファイルをうpしてもいいがそれじゃ
>>217 の勉強にならないもんな
256 :
デフォルトの名無しさん :2006/01/14(土) 04:29:27
>>250 それじゃだめ。毎回KillしてSetしなきゃ。
257 :
デフォルトの名無しさん :2006/01/14(土) 04:30:32
DialogBoxだからメッセージループは不要だろ… CreateDialogなら必要だけどさ。
おまえら自分の答えられそうな事にしか反応出来ないんだな 馬鹿の相手するとスレ全体が馬鹿っぽくなってくる もう少しマシな話題にしてくれ
260 :
デフォルトの名無しさん :2006/01/14(土) 05:13:22
じゃお前がましな回答してやってくれよ 氏のためになるようにな。
COMスレが無いみたいなのでこちらにお邪魔します。 IFoo *pFoo; pBar->SomeMethods(&pFoo); // IBar* pBar; であり、インスタンス作成済 // pFooで作業 pFoo->Release(); // ??? という状況です。pFoo->Release()するべきなのか、という質問です。 SomeMethodsのドキュメントに「pFoo使用後はRelease()を呼び出せ」と明記 してある場合はいいのですが、何も書いてないものもあるのです。 感覚的にはRelease()した方が良さげですが、一般的にこう考えるべきなのでしょうか? // でも他メソッドではAddRef()を呼べと明示するものもあって、心に迷いが生じました。 // なのにサンプルではAddRef()なしでRelease()を呼出していて、それで動作しているので混乱中 AddRef()、Release()の戻り値もイマイチ信用できないと聞き、手詰りになってしまいました。 詳しい方、どうぞ御教示下され
262 :
261 :2006/01/14(土) 05:34:11
書き忘れました。環境は WinXP SP2 + VC7 + Platform SDKです。 (DirectShowまわり)
263 :
207 :2006/01/14(土) 05:46:45
>>208 即レスありがとうございました。
WS_VISIBLEを指定していても、
WM_PAINTを送ってやらないまでは表示はされないんですね。
264 :
デフォルトの名無しさん :2006/01/14(土) 05:46:46
SomeMethods(&pFoo)でインスタンス作成したんなら インスタンス作成した回数ぶんRelease()でいいんじゃない? あとはエロくて詳しい人に任せます。
普通はSomeMethods内でIFoo->AddRefして返してると思う。なんでRelaese呼び出ししてOK。
IUnknownの実装でコンストラクタで参照数1にする例と0にする例があるな。
267 :
デフォルトの名無しさん :2006/01/14(土) 06:43:26
標準ハンドルの親プロセスから子プロセスへの継承についてです。 ファイルやパイプのハンドルは特に問題なく継承できます。 しかし、コンソールのハンドルについては、子プロセスがGUIアプリの場合、継承ができないみたいなのですが? もちろん子プロセスがCUIアプリの場合は継承できます。 GUIアプリにももちろんハンドルの値そのものは渡っているのですが、GUIアプリがそのハンドルを使おうとしてもエラーで使えません。 コンソールのハンドルをGUIアプリに継承させて使わせることができる方法をご存じの方、お教えください。 また、もし無理ならなぜこういう仕様になっているのかお教えください。
GUIだから
コンソールウィンドウの表示 デバッグ時に引数の値などをチェックする時にMFCならTRACE、Win32ならOutputDebugStringなどを使うでしょうがprintfのような入出力関数を使いたい場合はコンソールウィンドウを表示すれば出来ます。 #include <io.h> #include <fcntl.h> void OpenConsole() { int hCrt, i; FILE *hf; AllocConsole(); hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT); hf = _fdopen(hCrt, "w"); *stdout = *hf; i = setvbuf(stdout, NULL, _IONBF, 0); } 終了時に解放してください。 FreeConsole(); 結構重宝すると思います。
http://www.geocities.jp/monalipse/c/api/Console.html コンソールプログラムを起動したときにWindowsが
コンソール・ウィンドウを自動的に用意することからわかるように、
Windowsは実行ファイルを見てコンソールプログラムかどうかを識別している。
この情報は、実行ファイルのヘッダー部の特定のフィールドに埋め込まれている。
このフィールドの値が定数WINDOWS_GUI(=2)ならGUIプログラム、
WINDOWS_CUI(=3)ならコンソールプログラムになる。
コンパイラのオプション指定によってどちらかを設定するのである。
上記のオプションを指定するかどうかにかかわらず、C/C++コンパイラが
ソースコードから生成するマシン語は同じものである。
しかし、プログラムの開始位置がmain関数か、WinMain関数かという違いが生じる
BOOL WriteConsoleEx(LPCSTR buf) { // スクリーン・バッファのハンドルを取得 HANDLE hOut = CreateFile( "CONOUT$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0); if( hOut != INVALID_HANDLE_VALUE){ DWORD sz; WriteFile( hOut, buf, strlen(buf), &sz, NULL); CloseHandle( hOut); return TRUE; }else return FALSE; } バッファのハンドルを取得するには、入力の場合に「CONIN$」、 出力の場合に「CONOUT$」という特殊なファイル名を指定して、 ファイル作成用APIであるCreateFileを呼び出せばよい ファイル名以外の引数は、上記のソースの指定で固定と考えてかまわない。 こうして得たスクリーン・バッファのハンドルに対して、 ファイル書き込み用のWriteFileを呼び出すことで、コンソールに対して出力することができる 同様に、ユーザーが入力した文字列を取得するには、入力バッファに対してReadFileを呼びだせばよい
SetStdHandleで標準入出力を割り当てることはできるが、 printf等の関数で出力できるかどうかはライブラリの実装次第である // スクリーン・バッファのハンドルを取得 HANDLE hOut = CreateFile( "CONOUT$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0); BOOL ret = SetStdHandle( STD_OUTPUT_HANDLE, hOut); printf("出力テスト");
#ifndef NDEBUG int main() { //これらは必要なら。 HINSTANCE hinst = GetModuleHandle(0); int nCmdShow = SW_SHOWDEFAULT; PSTR pszCmdLine = PathGetArgsA(GetCommandLineA()); #else int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, PSTR pszCmdLine, int nCmdShow) { #endif まあコンソールがなくともATLTRACE2使えばprintfと同じように書式付でデバッグ出力できるし、 C++なら自分でデバッグ出力するストリームを書く方法もある。
275 :
デフォルトの名無しさん :2006/01/14(土) 10:11:38
>*stdout = *hf;
やるならfreopenとかだよな。
>>277 277は269の書くことが理解できないほどのゴミ
CD/DVDからファイル読み出すときに何倍速でドライブから読み出すかって どうやって変更したらいいの? 標準のファイルI/O APIではそれらしいのなかったよ・・
WindowsのAPIでそんなことができるのか…
DeviceIoControl経由で直接ATAPIなりのコマンド投げるんでそ。 ファイルI/Oなんかで探してるヌルいヤシには無理かと。
うちのマシンのCD-ROMドライブは8倍速固定ドライブなだ
俺はヌルいヤシだったのか ○| ̄|_
気持ちよさそうなヤツめ
ぬるぽ
びらびらがぐちょぐちょのぬるぬるでほかほか
=≡= ∧_∧ ガッ
/ ( ・∀・) /
〆 ┌ | つ 人
|| γ ⌒ヽヽコノ < >_∧∩
|| .| |:::|∪〓 V`Д´)/ ←
>>286 ./|\人 _.ノノ _||_. /
289 :
280 :2006/01/14(土) 16:21:23
なるほどDeviceIoControlってのがあるのか もうちょっと詳しく頼む ATAPIコマンド直接ってことはある程度のファイルシステムを 実装する必要あるってこと? それは大変だ・・ もうちょっと簡単にやる方法ないかな?
ねーよデブ。
ファイルシステムは関係ないっつーの。 デバイス(ドライブ)に対して動作を制御するための命令を出すの。 そういう命令が実際あるかどうかは知らないし、そこに関しては WIN32API外の話だ。
292 :
280 :2006/01/14(土) 17:13:01
じゃあファイルの先頭セクタがどこかどうやって知ればいいの?
>>292 おまいの最初の質問はそういう話じゃなかったろ?
294 :
280 :2006/01/14(土) 17:22:41
ATAPIコマンドで直接制御しないといけないんでしょ? そうなるとセクタ番号わからないとできないはず それとも何倍速かだけATAPIコマンドで指定して ファイルの読み込み事態は普通のReadFileでやってもいいの?
自分で読み書きするなら、単にウェイト入れてコントロールすればいいじゃん。 今時のドライブは「何倍速」とかいうコントロールは出来ないと思う。 そもそもドライブ自体が可変速で動いてるし。
>>269 void OpenConsole()
{
AllocConsole();
freopen("CONOUT$", "w", stdout);
}
で十分。逝って良し。
>>295 出来ないわけないだろ。
CD2WAVとか使ってみろ。
298 :
280 :2006/01/14(土) 18:51:22
そうかな 普通CD/DVDからファイル読み出したら最高速でドライブ動くみたいで うるさいでしょ?それを避けたいのよ CD/DVDプレイヤーとかだとうるさくならないからできると思うんだけど
うるさいなら8倍速以下のドライブ使えばいいじゃない。
301 :
280 :2006/01/14(土) 19:53:53
おおサンキュウサンキュウ
>>298 ただのデータ読み出しと音楽/動画再生を一緒にすんじゃね
指定したソフトから特定のAPIが呼ばれたときにその処理をすり替える、 つまりAPIをフックするプログラムを作りたいんですが、 参考になるソースとかはないでしょうか。
304 :
デフォルトの名無しさん :2006/01/14(土) 21:45:05
画像ファイルをスライドショーするフラッシュファイル(swf)を作成する アプリを作りたいのですが、フラッシュファイル(.swf)を書き出すAPI・仕様とか、 サンプルプログラムがあったらURLを教えてください。 (QuickTime APIで可能でしたでしょうか?) ご教授よろしくおねがいします
>>305 凄い!こんな便利なものがあったなんて。
ありがとうございました。
307 :
280 :2006/01/14(土) 22:18:42
>>298 >ただのデータ読み出しと音楽/動画再生を一緒にすんじゃね
どうして?
ファイルI/Oに関しては同じではないの?
何か異なるの?
おれ別に音楽/動画再生するわけじゃないけど
同じような感じでストリーミング処理を実現したいんだ
今教えてもらったcdromtoolのソース読んでる
SCSIコマンド直接投げてるっぽいとこがある
ATAはまた別かな?
ATAPIってSCSIコマンドをIDEバス上で投げてるわけだが
>>298 CDの音楽の再生には遅くても問題ないから遅くなり、従って音も静かになる。
そもそも音楽の再生されるときの早さが1倍。
逆にファイルなどのデータを読み出すのは(静穏性などを考えなければ)早いほうが良いに決まっている。
だからこそ速度が上がることがCD/DVDドライブの性能向上とされた。
310 :
280 :2006/01/14(土) 23:15:22
>>308 なるほどそういうことか
サンキュウサンキュウ
311 :
280 :2006/01/14(土) 23:19:24
>>309 つまり295が言うように自前でwaitでも入れてゆっくり読めば
ディスクの回転は自然と落ちると言ってるわけ?
でもそれやったけどそうならないから質問したんだ
わかったから、もう黙って作れ。
314 :
280 :2006/01/15(日) 00:03:58
>>313 ここ
>CDの音楽の再生には遅くても問題ないから遅くなり、従って音も静かになる。
「遅くなり」ってのは自然とディスクの回転が遅くなるって意味じゃないの?
>>312 もう黙ってようと思ってたんだけどごめんね
>>314 「自然と」というがおそらくは音楽CDだけが1倍で動くように作られていると思う。
311のように自前でwaitを入れても、少しの時間全力で動くのと少しの時間止まるのが繰り返されるだけだと思う。
CD読んでる間HDDをガリガリ言わせれば、CDの音は気にならない。
CD読んでる間ガリガリ言えば、CDの音は気にならない。
>>317 280は自分のPCのじゃないCDを静かに動かしてみたいと思ってんじゃねーの
319 :
261 :2006/01/15(日) 01:34:01
>>264-266 お返事ありがとうございました。
やはりRelease()を呼ぶべきですよね。
すっきりしました。どうもありがとうございました
>>303 そういうことをしたくなったときに買う本が『Advanced Windows』
322 :
デフォルトの名無しさん :2006/01/15(日) 09:37:27
質問させていただきます。 SDKでスレッドを立ててその中で非同期通信を設定しました。 データが入ってきたときにエディットボックスに書き込むように書いたつもりですがエラーが出ます。 コンパイルしています... main.cpp c:\documents and settings\taka\my documents\visual studio projects\受信\main.cpp(91) : error C2664: 'GetDlgItem' : 1 番目の引数を 'LPVOID' から 'HWND' に変換できません。 'void*' から非 'void' 型への変換には明示的なキャストが必要です。 c:\documents and settings\taka\my documents\visual studio projects\受信\main.cpp(96) : error C2664: 'GetDlgItem' : 1 番目の引数を 'LPVOID' から 'HWND' に変換できません。 'void*' から非 'void' 型への変換には明示的なキャストが必要です。 c:\documents and settings\taka\my documents\visual studio projects\受信\main.cpp(120) : error C2664: 'GetDlgItem' : 1 番目の引数を 'LPVOID' から 'HWND' に変換できません。 'void*' から非 'void' 型への変換には明示的なキャストが必要です。 エラーからわかると思いますが hThread1=CreateThread(NULL,0,fnThread1,hWnd,0,NULL); /* スレッド作成 */ をして DWORD WINAPI fnThread1(LPVOID hWnd) { ...中略 SetWindowText(GetDlgItem(hWnd,IDC_EDIT2),"接続が確立されませんでした。"); として上記のエラーが出ました。どの用にしたらいいと思われますか?よろしくお願いします。
323 :
322 :2006/01/15(日) 09:49:04
要するにスレッドでの結果をダイアログに表示したいのです。 って・・・ 誰も居ない・・ テラサビシス
見てるよ だけどapiと全然関係ないから無視しただけ
325 :
322 :2006/01/15(日) 09:53:45
わかるなら答えていただきたいです。
327 :
デフォルトの名無しさん :2006/01/15(日) 10:06:27
>>326 それなんですけど、どうやればいいのかがわかりません。
この場合の明示的なキャストとはどうやればいいのでしょうか?
'void*' から非 'void' 型への変換・・・?
GetDlgItem はどこにいったのだ
329 :
デフォルトの名無しさん :2006/01/15(日) 10:11:37
ん?というと・・ HWND hwnd = GetDlgItem(hWnd,IDC_EDIT2); ということでしょうか・・??
330 :
328 :2006/01/15(日) 10:12:11
ごめん あった hWnd の使い方がおかしい
>>327 お前はプログラムをやるのはまだ早いよ。
Cを最初から勉強しなおせ。
hThread1=CreateThread(NULL,0,(LPVOID)fnThread1,hWnd,0,NULL); つーか、今の時代にCreateThread?
333 :
デフォルトの名無しさん :2006/01/15(日) 10:13:06
334 :
デフォルトの名無しさん :2006/01/15(日) 10:13:49
335 :
デフォルトの名無しさん :2006/01/15(日) 10:16:39
>>331 すいません。最近VC++に手をつけ始めたもので・・汗
336 :
328 :2006/01/15(日) 10:18:14
要するに、GetDlgItem() の第一引数の型がおかしいって コンパイラ様がおっしゃってるので、適切にキャストするよろし
>>335 まずあれだ。
キャストって知ってるかい?
338 :
デフォルトの名無しさん :2006/01/15(日) 10:20:05
>>336 ありがとうございます!!!
コンパイラ様のお告げの意味がわかるようにならないとですね・・
ありがとうございました。
339 :
デフォルトの名無しさん :2006/01/15(日) 10:57:55
>>332 CreateThreadは使わない方が良いのでしょうか?
340 :
デフォルトの名無しさん :2006/01/15(日) 11:00:05
>>338 お前はC/C++をやるのはまだ早いよ。
プログラムを最初から勉強しなおせ。
341 :
デフォルトの名無しさん :2006/01/15(日) 11:04:43
343 :
デフォルトの名無しさん :2006/01/15(日) 11:17:33
/ ヽ/ ヽ l l l l l l ,. ‐'' ̄ "'' 、 ,,. --‐┴─-- 、 / ̄ "'' -、 / ,.-‐''"´ \ _/ ヽ l / ヽ l l / ● l l ヽ l (_人__ノ ● ヽ / そんな事言われても ,,>-‐| ´´ | / , , ,. ‐'' ̄ "' -、/ ウチ ポン・デ・ライオンやし / l ヽ_/ / ゙ヽ l ` 、 l l l ,. ‐'' ̄ "' -、 ,. ‐'' ̄ "'' -、 l l, / ヽ / ヽ, / ヽ、,, l l l,,,___,,,/ "'''l l l ヽ /ヽ / ヽ,___,,,/ ヽ,,___,,,/ / | / |
音楽CDだってリッピングの場合はx倍速で動くじゃん DVDビデオだって2時間の映画が単純コピーに2時間かかったりしない
345 :
デフォルトの名無しさん :2006/01/15(日) 11:21:26
| ̄``''- 、
| `゙''ー- 、 ________
| ,. -‐ ''´ ̄ ̄`ヽ、_ /
|, - '´ ̄ `ヽ、 /
/ `ヽ、ヽ /
_/ ヽヽ/
/ / / / / / ヽハ
く / /! | 〃 _/__ l| | | | | | | ||ヽ
\l// / | /|'´ ∧ || | |ー、|| | | l | ヽ
/ハ/ | | ヽ/ ヽ | ヽ | || /|ヽ/! |/ | ヽ
/ | ||ヽ { ,r===、 \| _!V |// // .! |
| || |l |ヽ!'´ ̄`゙ , ==ミ、 /イ川 |─┘
| ハ|| || | """ ┌---┐ ` / // |
V !ヽ ト! ヽ、 | ! / //| /
ヽ! \ハ` 、 ヽ、__ノ ,.イ/ // | /
┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/
|(/(/(/(/(/(/(/(/(/(/│|| |\ 〃
r'´ ̄ヽ. | | ト / \
/  ̄`ア | | | ⌒/ 入
〉  ̄二)
>>322 は死ねば| | | / // ヽ
〈! ,. -' | | ヽ∠-----', '´ ',
| \| | .良いと思います | |<二Z二 ̄ / ',
| | | _r'---| [ ``ヽ、 ',
| | | つかスレ違いです >-、__ [ ヽ !
\.| l. ヽ、 [ ヽ |
ヽ| \ r' ヽ、 |
/ ̄ ̄ ̄ ヽ ( ヌ … ヌルポ ) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ヽ、_ _ノ ( ぬるぽぬるぽ! ) ヽ{ ヽ、_ _____ノ _,,, _ ノノ Σ , -'" `ヽ、 / / ィ ト ヽ r、},々 / /,ィ ハ N \ }7凡 > ,彳 レレ' V ヽN}Ll ヽ ぬるぽぬるぽ… ハM| ○//// ○ `ー、イ } ぬるぽぬるぽぬるぽ! {N{ヽl "" r-┐"" _6ノノNノ }ヽ、 ヽ _L__l_ ノ _ノノノ { `ー--'≪_ V _≫'" ノl l ll l l、_ r' ,ヘ 1 _,,-'"l l l l l l ノ i レ' V l ヽ、_l l バタバタ ヽ ̄ ノ| ト、__彡 _ ,.'´ ヽ ガッ ! ノ_,メ,_ハ〉 _ l (!l.‘д‘ノ| , '´ィ´ `ヽ ! (とゝ )i卯ミノ从从リ *⌒) ノ ノ/⊂彡☆#))Д゚ノリ ` `iララ′ と)j水!つ
>>344 そうとは限らない。DVDビデオだと強制的に等倍になるドライブもある。
その場合ドライブのファームウェアを改造しなければ本来の速度を出せない。
通称 改ファーム。
>>339 作ったスレッド内でCRTもMFCも使わないならCreateThreadでいいよ。
んじゃオレはCreateThreadでいいや
どこかで _beginthread 使った方が良いと書いてあったな
352 :
デフォルトの名無しさん :2006/01/15(日) 13:17:19
画像ファイルをスライドショーするフラッシュファイル(swf)を作成する アプリを作りたいのですが、フラッシュファイル(.swf)を書き出すAPI・仕様とか、 サンプルプログラムがあったらURLを教えてください。 (QuickTime APIで可能でしたでしょうか?) ご教授よろしくおねがいします
_beginthreadexのほうがいい。てかぶっちゃけ_beginthreadも非推奨。
>>351 349じゃないが…CRTを使わないならCreateThreadでいい。
逆に使うなら_beginthreadでないとリークが発生する。
355 :
354 :2006/01/15(日) 13:30:00
あっと、353にあるように_beginthreadexが推奨だね、、、失礼をば _beginthreadを_beginthreadexと読み違いてた
;".:^; ;".:^; ;";'.::.:'; ;'.::.:'; ;' ;.::;.:;.:'; ; ;.::;.:;.:'; ': ;" ;'.:;.::;:::;';"" "" ;'.:;.::;:::;'; ': ;" ':, ;' ':, ; '; また頑張ってね♪ ミ ● ● ミ ミ ミ' ~;";^: ミ """ ;" ミ '; """ ミ oOOo ミ '; """ 丶,.,,,:" 丶,,,,:" """ ;"':,_ .○,' )) ':, ;"ミ ミ ,,; _ _;" ; ;' ; " :' ;' ; ':, ;' ; ':, ':, ,、:' ミ ':, ;.,,;.,. ;.,..,;.,. ', ....,.,ミ ミ' ~;";^:ミ X ミ' ~;";^: ミ ミ `"ミ ミoOOo ミ ミoOOoミ ミ ミ ,.,.,...':,_ミ ○ ;ミ '; ;ミ ○ ;ミ_:' ミ,.,;.,.;,,. 丶, ,:"丶,,:" ミ,.,;.;,.丶
>>346 :;' /:/ `メ、 i: ハ: i: : ii:i ヽ: i: :ii; : : : :iヽ: :
i: :i: i: i/,ィ=ミヽi: iヽNi:i_`iL:H---i:i: ヽ
i: :i :i / {.iトgj:i ヽ! lルィ丁゙)‐ミ「!: :ii/: : i
;':/ヾム⊂つ'´ i:.;{iil1:ソ i:i:::i !: : i:
: i: /: iト 、,,ミニっ /i/゚: o i .
: i:/: : i 、`_  ̄/.:/: : : i: :
>>322 さんに
: /: .::ハ ゙llllllル `ヽ //. : :/! i: . <あやまれ!
/: .::/:::/`、 lll/: : : : :} /〃:./: /i iハ!
i. ::/i::/::::::i::ヽ`三ー 'ノ , イ/: /: /.::i i::::::
::::///::::::::i:::i:..ヽ---<::::/:::/: :/: : i iヽ::
__, ----- 、 ___「「 |  ̄⌒ヽ¬、\ / ̄ブ / | \ ヽ 〃 / / ハ |ヽ ヽ\ ヽ ヽ // / | ||l |ト、ヽ \ \ ヽ ! // /l | || ヽ ヽ\>┼\ ヽヽ | || | | | |」十 ヽ ヽ ヾィ¬ミヾ | 川| lハ | | | トxrテミ ├1:::リ}| |}}リト〉 ヽ !トlハ {{ ヒハ ヽニソ | レ1∧| ヽV八ハ ゞ┘ , "" | | || { // /jハ "" 一 , イ /| l| ハ リテラです。 // // / /`丶 、 __/ ||/l| /l| | ヽ // /// | / |川r┤ |//|/ || | | ヽ / ///川レ┬ '" / /|ハ| >┬L|ヽ ! ./ / // / | || | /ヽ ァ'´ ||_メ/ /⌒ヽ}} / // /レ7 」 || ヽ | / __乂レ'´ / _ヽ / / /ハ/ |  ̄\」 /r‐ '´ ̄ } \/ トミヘ / / / // }‐ ¬厂!'´ ヽ/ }} \ハ |/ / //| / _L」 | / , -------- ヘ || 〃/〈 | |厂 //个、`ー、 / //
/ / / | \ ヽ / / / / / || | i ヽ i i / / / / / / || || |│ |ノス |// / /___, -一ァ| /! |ト、|│ | | く」 |,-‐¬  ̄---┘'7 |! ハ! |,、-┼十|! | | | , -‐ ''" し' '´_ /,ィ二l |ト、/!ヽト、\_ヽ!|!l | ハ | ,r/ __ ,イ|リ ヾハ! ヽ! ,ィ⌒ヾミリノ!/リ | / ||ヽ -' / ̄ )` __ |ヒノ:} '` ,イ/ | | ,r ' ヾ、 ,-、____ , イ ̄,r==- ==-' レ' /| | / ヽ `ーソ ' | |ト、,ヘ ′"" "" / / || | . / \_ / | ハ ヽ`゙'ヘ ' '__. ィ / / | | | / / / | ヽ 川\ ヾ三ニ‐'′//! | | | | 妹のクレアです!! / / / 八 \川| |`ト- .. __ , イ‐ァヘ | | || |! / / / / \ \ 「`ー- 、 / .〉 ト、| ヽ、 ,イ /-─=¬ニヘ、_ \ 厂\ 厂ヽ /!| | `ー=ヘ -‐  ̄ /─ '  ̄ ├- ヽ\ \ノ\ \ 人 ハ!ヽ || |-┤ ヽ / /!‐-- | |\ ト、_`ヽ oヽ ト、! || |‐┤- ヽ // 〉 __ / ├‐- || | 川-‐ | | 厂7! ハ! ├:┤  ̄ヽ / / ー ─  ̄ ├‐- リ || ハ!ヘ | | ト┤|/′ ヾ,┤ ゙i_ ‐ ' 〉‐- | / /\ .|o | /ヽ/(′ ∨ \ ‐--─ ──-r、___-、 /ー_ {( '´>、! /ヽ/ |\ \
361 :
デフォルトの名無しさん :2006/01/15(日) 18:32:08
〉〉363に期待
㍆㌋_㌆㌨㌰㌾㌈
364 :
デフォルトの名無しさん :2006/01/15(日) 18:45:44
意味わからん
368 :
デフォルトの名無しさん :2006/01/15(日) 18:51:33
/ ヽ/ ヽ
l l l
l l l
,. ‐'' ̄ "'' 、 ,,. --‐┴─-- 、 / ̄ "'' -、
/ ,.-‐''"´ \ _/ ヽ
l / ヽ l
l / ● l l
ヽ l (_人__ノ ● ヽ / そんな事言われても
,,>-‐| ´´ | / , , ,. ‐'' ̄ "' -、/ ウチ ポン・デ・ライオンやし
/ l ヽ_/ / ゙ヽ ところで
>>359-360 おはつです
l ` 、 l l 可愛いなぁ 連絡先交換せーへん?
l ,. ‐'' ̄ "' -、 ,. ‐'' ̄ "'' -、 l
l, / ヽ / ヽ, /
ヽ、,, l l l,,,___,,,/
"'''l l l
ヽ /ヽ /
ヽ,___,,,/ ヽ,,___,,,/
/ |
/ |
370 :
デフォルトの名無しさん :2006/01/15(日) 18:56:03
自己解決しました。
だが断る
373 :
デフォルトの名無しさん :2006/01/15(日) 19:06:23
技術板で何やってんだよ…他所行けや
マ板にうってつけじゃないか。
マ板行った事無いけど、そういう所なのか
>>366 よ、
>>363 が分からんと申すか。
そのまま横に読めばいいんだよ。
つまり、
マルカイミォナピボルエー
・・・・っというAPIを探してるんですが、 どのファイルをインクルドーしたらいいのでつか?
379 :
デフォルトの名無しさん :2006/01/15(日) 20:32:23
>>378 お好きにドウゾ。
突っ込む気にもなれない
APIって中でどんなことしてるんだろう
A・・・あなたの P・・・パソコンで I・・・生きている
382 :
デフォルトの名無しさん :2006/01/15(日) 20:50:47
>>381 によりAPIは専ら日本語が得意だということが判明。
_,、-‐‐'ー- 、,_ヽ_ / ,、 -‐ ''"´;: ; ヽ / / ,、‐''"´´ ;: ;;`ヽ / (/ ,、-‐''"´´ _, ,丶 そおおおんあわけねええだろぉ? i (ゝ /, , 、ー''"、´ _ヽ | /'''_ー-<___, -'´ lー''"ノ ヽ. , へ、 _ 、 'l { `ヽ;ー-、-,ー‐,r''1 ; ;ヽ<''ヘ ヽー---‐'''""""" r、 iヽ ヽ' `' .|、 ,. | | {λヽ.ヽ ,,ソ ヽ-' t' __ノ ,______ \ゝ、iヽー '`ー'''`1´ ~ヽ、、、/~  ̄ ̄,~"= 、‐'''''ヽ `'ヘ.',ヽ , 、 { ,、- '´ / \ ヾ ヽ⌒ヽ ヽ { , ‐、_ / . | ゛‐-ー'.,!\\__ `ヽ. ,、 / `'´ , 、 / / | \ \゛、ー'>' ノrー' ´ | , / r; / / |\,_\ `""´r''| ト、 | | / i / | フ 丶、___ノヽ. |/ / / rヽ\ ( | ,ヘ | | ヽ \ ‖/ /
384 :
デフォルトの名無しさん :2006/01/15(日) 21:27:54
指定されたパスがディレクトリなのかファイルなのかの判定をしたいです。 GetFileAttributes()を使用してみたのですが、 FDドライブやCD-ROMドライブを指定された際、 FDやCDが入っていないと、キャンセル、再実行、続行の選択の メッセージボックスが表示されていまいます。 メッセージボックスを表示させずに、属性を取得する方法はないでしょうか?
>>384 SetErrorMode(SEM_FAILCRITICALERRORS);
>>384 試してみんと分からんけど、
PathIsDirectory
という関数もある。
>>384 HDDであることを確認してから読みに行くとか駄目なのかな?
正直、シェルAPI使ったほうがいい。
>>387 ありがとうございます。明日、そちらも試してみます。
(開発環境が会社にしかないので)
>>388 ユーザに指定されたパス(FDDやCD-ROMドライブも含む)から読み込んで・・・
という処理の流れになるので、HD上だけが対象じゃないんです。
仕事でWin32APIを使っているひといる?
スレ番が39だから、あんまり使ってる人いないんかなぁと、、
↑Win32APIの国内利用者はネラーが大多数だと思っている中学生。
ネラーの大多数はAPIって何の略?って聞かれても
>>381 と答えるでしょうwww
APIたん
396 :
デフォルトの名無しさん :2006/01/16(月) 06:38:56
A あなたの P ぱいぱい I いじらせて
397 :
デフォルトの名無しさん :2006/01/16(月) 06:44:30
にしても少ない気はしないかい?
398 :
デフォルトの名無しさん :2006/01/16(月) 06:48:03
ひょっとして実は人気ないんちゃうんかとか不安になるじゃろがっ
マナーが悪いから2chは嫌いなひと多いしなぁ
他プロセスに{Send,Post}Messageする時、{W,L}Paramにポインタを格納しても、 送り先プロセスでは使えないからムダ。32bitに収まる値のみちゃんと渡せる ・・・って認識でOKですか? またこれに関連し、「他プロセスに数十文字程度の文字列を渡したい」って思った時に 使うべきワザについて今調べています。 ・メモリマップトファイルなる人 (使用経験なし) ・クリップボード 以外にもっと適切なワザはあったりするのでしょうか?キーワードだけで良いので 御教示頂けないでしょうか?
WM_COPYDATA
つ VirtualAllocEx()
づ WM_SETTEXT
404 :
デフォルトの名無しさん :2006/01/16(月) 10:10:44
PS/2とUSBにキードードをそれぞれ接続している状態(計2台接続)で、 WM_KEYDOWNが発生した際にどっちのキーボードが操作されたのか判定する方法ってありますか?
>>404 オレは何でそんなことをする必要があるのか問い詰めたい。
406に関連して思ったのだが、 アトムからそのアトムが持っている 文字列の長さを知る方法は無い?
>>400 もひとつオマケに
named pipe
さらにオマケで
DLLでメモリ共有
個人的には、
小さなデータ:WM_COPYDATA
大きなデータ:メモリマップドファイル+PostMessageで通知
をよく使う。
>>400 他にもメールスロットやソケットと言う手もある。
わからないなら黙っててください。 or 意地悪ですね。
412 :
404 :2006/01/16(月) 16:10:19
以前マウスのポインタデザインを簡単に変更するAPIがないかどうかを 質問した者ですが、レジストリを直接変更しても設定が即座には反映 されませんでした(あたりまえか)。 設定値を変更した後に何か行なう必要があるんでしょうか?。 それともやはり何か簡単に変更できるAPIが存在するのでしょうか?。 ■変更した部分 \HKEY_CURRENT_USER\Control Panel\Cursor の各値
SetSystemCursor で全部変えちゃえばできそうな気もしますが、 それだとマウスのプロパティにある「デザイン」は変わりませんよね。 「デザイン名」でズバッと変更できそうな気もするんですが・・・。
>>415 適当なこと言ってみるけど、デスクトップテーマ関係の
APIがあったと思うから、そこでいじれるんじゃない?
>>412 あるにはあるが・・・・・
趣味で作っているプログラムならあきらめろ。
仕事で作っているプログラムでどうしても必要というなら、
「i8042.sys・kbdHid.sysとkbdclass.sysの間に入れてどちらのキーボードからのIRPかを
アプリに通知するfilter-driver」を作成できる(デバドラのスキルを持つ)システムハウスを
探して依頼しろ。
filter-driverは少なくとも下げ進行のスレの雰囲気も読めない教えてクンに作れるシロモノではない。
418 :
デフォルトの名無しさん :2006/01/16(月) 17:40:26
ググッてみました。 なるほど、作ってみますね ちょうど大学で研究してるところなんですよ。 それを応用すれば、なんとかなりそうです。 親切に教えてくれてありがとうです。
>>404 ,412,418
Raw Input APIはどう?XP限定で。
GetRawInputDeviceList()でデバイスを列挙しておいて
WM_INPUTで判別するような手順になりそうだが。
420 :
413 :2006/01/16(月) 19:03:30
うーん、デスクトップテーマっすか・・・。 マウスのデザインを保存すると HKEY_CURRENT_USER\Control Panel\Cursors\Schemes に設定が保存されるんですが、Windowsはこの値を取得し、 パースして SetSystemCursor でカーソルを変更して HKEY_ CURRENT_USER\Control Panel\Cursors にも値を設定する などという面倒な事はやってないと思うんですが・・・。 やっぱデスクトップテーマ関連なんでしょうか・・・。。
>400 WIN16から連綿と続く互換性の為に、有名なWM_系メッセージは Windows側でマーシャリングしてくれたはず。
SetWindowTextに〜なときにはWM_SETTEXTを使えと書いている有様。
423 :
400 :2006/01/16(月) 19:47:34
>404 WM_KEYDOWNなんかに頼らず、はなからDirectInput使ったらよくね?
バカな424が降臨いたしました
>>425 おれもDirectInput使えばいいと思ったんだけど?
自演乙
>>425-426 俺もそう思う。
DirectInputの使い方を知ってるなら、だけどね。
レス番間違えちゃったぜw
>>424 , 426な OTL
>>424 、426、429
キミたちはそれでやっておけば良いと思うよ、それがお似合いだ。すごく似合ってる
リストコントロールのアイテムの名前を取得しようと、 LVITEM pItem; TCHAR Buf[256]; for(i = 0; i < NumItem; i++) { pItem.mask = LVIF_TEXT; pItem.iItem = i; pItem.iSubItem = 0; pItem.pszText = (LPSTR)Buf; pItem.cchTextMax = sizeof(Buf); ::SendMessage(hw, LVM_GETITEM, 0, (LPARAM)(&pItem)); TRACE(Buf); } このように書いたのですがSendMessage関数の返値が0のままで取得できません。 ハンドルとかちゃんと取得できてるんですが、何か指摘お願いします。
ミミ ヽヽヽヽリリノノノ ミ ,,、,、,、,、,、,、,、、 彡 l i''" u u i | 」 u ⌒' '⌒ | ,r-/ <。> < ゚ >| l u ノ( 、_, )ヽu| ー' ノ、__!!_,.、| | | | | | | | | ∧ u ヽニニソ l /\ヽ u u / / ヽ. `ー--一' ノ/ヽ
>>432 本題とは全く関係ないけど、次のところをつっこむ。
1. ポインタ型でない変数の名前の頭にpを付けている。
2. C++ではforでループ変数を宣言するのが極めて一般的。(::を使っていることからC++と見受けられる)
3. TCHARの配列をLVITEMのメンバpszTextに代入するのにキャストは不要。
しかもLVITEMのメンバpszTextの型はLPSTRではないのでかえって害。
4. LPARAMへはC++的にはreinterpret_castだろうな。これだけは好みの問題だろうけど。
DLLから呼び出し元の実行ファイル名を取得できる関数ってないでしょうか?
>>435 GetModuleFileName(NULL,
>>432 hwがあさってのウィンドウになってんじゃない?
あと、pItem.cchTextMax = sizeof(Buf)/sizeof(TCHAR); じゃん?
ListView_GetItemText() はどうよ?
リストボックスと間違えてるとか・・・。 それはないかw
439 :
432 :2006/01/17(火) 00:47:19
すみません。自己解決できました。 違うプロセスのコントロールを参照してました。 いったんWriteProcessMemoryでそのプロセス内に書いてからReadProcessMemory で読んだらいけました。 バカな質問に付き合ってもらってホントにすみませんでした。
441 :
デフォルトの名無しさん :2006/01/17(火) 01:08:00
ここらで誰かまとめてくだらい。 カーネルを介するプロセス間通信とmmap系のものと。
>>441 メモリマップドファイル
VirtualAllocEx
名前付きパイプ
メールスロット
WM_COPYDATA
グローバルアトム
DLLでの共有セグメント
(WM_SETTEXT)
あと、COMもプロセス間通信できているよな。
WM_COPYDATA,WM_SETTEXT,WM_GETTEXTも結局はWindowsが自動的にメモリマップトファイル作ってるだけだし。
過程より界面
445 :
デフォルトの名無しさん :2006/01/17(火) 06:59:28
ツールバーのデフォルトビットマップで、 STDとVIEW以外でなんか無いでしょうか。 更新、拡大、縮小があればいいなと思うんですが。
>>442 名前無しパイプとソケットも結構使うと思う。
COMのプロセス間通信の部分はRPCを使ってるらしいが、 RPC自体は名前付きパイプ、NetBIOS、Socketで実装されてるとさ。
448 :
デフォルトの名無しさん :2006/01/17(火) 20:33:54
こんにちわ。質問をさせて下さい。
現在ブラウザからActiveXを介してローカルのEXEを起動するシステムを考えています。
いくつかのサイトを調査しました。その中でハ○ゲームのゲームインストーラの動作
を見ていて、よく分かりません。
ActiveX としては C:\WINDOWS\Downloaded Program Files\HgPlugiXJP21 Classとして
ダウンロードされています。
サイトからダウンローダーを起動しているHTMLは以下の通りでした。
location.href = "hangXme://
http://gamestring.hangXme.co.jp:10000/?k22e..なんちゃら ";
試しに【ファイルを指定して実行】で hangXme: と実行してみると、該当EXEが起
動します。これはプロトコルとして登録されているのでしょうか?よく分からないので
すが rundll32.exe msconf.dll とかが関係しているのでしょうか?
ちなみに 「ファイルの関連付け」としてはレジストリに以下が設定されています。
HKEY_CLASS_ROOT\HanGXme\Shell\Open\Command
値:C:\WINDOWS\Downloaded Program Files\HGStartXJP21.exe %1
で、hangXame: を実行するとHGStartXJP21.exeが起動します。
この辺の仕組みが分かりません。よろしくご教授下さい.
そんなバックドアまがいなクソプログラム野郎はお帰りください
プロトコルも関連付け可能。 なんでわざわざ伏字なの?
451 :
デフォルトの名無しさん :2006/01/17(火) 20:51:53
だけど、ネットゲームの世界ではそのやり方が標準ではないでしょうか? べりサインの証明書をつければ問題ないと思うのですが... 確かにユーザーとしては不安な面もあるような気もしますが、ダウンロード元を信用してActiveXを 起動する訳ですから。 それが信用できないとなると、一般のソフトウェアも使えないという事になるのでは? 一般のソフトウェアだって、悪意があればローカルな情報を送信できる訳ですから。
452 :
デフォルトの名無しさん :2006/01/17(火) 20:54:29
>>450 ありがとうございます。勉強してみます。
伏字にしないとまずいかなぁと思ったものですから...
一般のソフトウェアにそんなバックドアまがいのがあったら大事だバカ
寝糞んのとか、そいつらに悪意が無くても攻撃側に利用されりゃ一緒なんだよ
455 :
432 :2006/01/17(火) 21:38:43
またハマってしまいました。昨日と同じ要領でリストビューのアイテムを選択状態にしたいのですが、 次のコードだと、SendMessageが失敗を返してきます。 メモリの確保まではいってるんですが、何かアドバイス願います。 LVITEM lvItem; LRESULT lResult = FALSE; DWORD dwProcessId = 0; HANDLE hProcess; i iItem = 3; ZeroMemory(&lvItem, sizeof(LVITEM)); lvItem.mask = LVIF_STATE; lvItem.state = LVIS_SELECTED; lvItem.iItem = iItem; lvItem.iSubItem = 0; lvItem.stateMask = LVIS_SELECTED; GetWindowThreadProcessId(hListView, &dwProcessId); hProcess = OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, dwProcessId); if ( hProcess ) { LVITEM *pvlvi = (LVITEM *)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); ::WriteProcessMemory(hProcess, pvlvi, &lvItem, sizeof(LVITEM), NULL); lResult = (int)::SendMessage(hListView, LVM_SETITEM, 0, (LPARAM)pvlvi);
hListViewがぬるぽだとか?
457 :
432 :2006/01/17(火) 22:03:11
>>456 書いてなくてすみません。
hListViewはちょっと上で取得してます。
同コントロールのアイテム名は読めてるんで、正しいものが入ってると思います。
>>455 lvItem.pszTextのアドレスが指定されていない
>>455 SendMessageの戻り値をキャストする必要はない。
本題とは関係ないけど なぜSendMessageの戻り値をintにキャストしてるんだろ
::WriteProcessMemory(〜 のところをVirtualAllocExでぐぐると二番目にでてくるページの Windows NT/2000 用の VirtualAllocEx() と WriteProcessMemory() / ReadProcessMemory() 〜 のようにやってみたらどうかな
463 :
432 :2006/01/18(水) 00:34:18
>>462 やっぱりだめみたいです。
リストビューを持つ他のアプリケーションやListView_SetItemState(...も試してみましたが
なぜかstateの変更だけがうまくいきません。削除や色の変更はできるのに。
別のWindowsXPSP2 proを使ってます。もう一台XPSP2 homeのマシーンでもできませんでした。
他のプロセスのstateはいじれないようになってるんでしょうか。
464 :
462 :2006/01/18(水) 00:49:59
>>462 で書いた「共有メモリを利用するには?」ってページのNT/2000用のサンプルに
LVM_SETITEMするものを付け加えて実行してみたらデスクトップのアイテム全部選択されたけど、
>>432 のOSはなに? きちんとさっきのページのとおりやってみた?
465 :
462 :2006/01/18(水) 00:50:57
書き忘れた。こっちはWinXPSP2。
466 :
462 :2006/01/18(水) 00:52:00
あ・・・よく読んでなかった。XPSP2proね。スマソ。
467 :
462 :2006/01/18(水) 00:59:36
となるとそのListView使ってるアプリがstateの変更をさせないようにしてるのかも。 そのアプリの名前は教えられないの?
468 :
432 :2006/01/18(水) 01:08:45
>>462 いくつかのアプリで試してみたんですが、
デスクトップ(エクスプローラ)は試してないんで
「共有メモリを利用するには?」のところのをコピペしてやってみます。
下のように変更して動かしているんですが、まったく選択されません。 pLocalShared->mask = LVIF_STATE; pLocalShared->iSubItem = 0; pLocalShared->state = LVIS_SELECTED; pLocalShared->stateMask= LVIS_SELECTED; ... forループ内 ::SendMessage(hSysWnd, LVM_SETITEM, 0, (LPARAM)pSysShared);
追加する部分 pLocalShared->mask = LVIF_STATE; pLocalShared->iSubItem = 0; pLocalShared->state = LVIS_SELECTED; pLocalShared->stateMask = LVIS_SELECTED; // アイテムの状態をセット for (int i = 0; i < nCount; i++) { pLocalShared->iItem = i; WriteProcessMemory(hProcess, pSysShared, pLocalShared, dwSize, &dwNumberOfBytes); SendMessage(hSysWnd, LVM_SETITEM, 0, (LPARAM)pSysShared); }
ハンゲームプロトコルこうぇーよ。 クソ!一生いかねー。 ドメイン0.0.0.0で登録しといた。 これでよし。だよな?
ハンゲーやばいの??
473 :
デフォルトの名無しさん :2006/01/18(水) 02:29:48
チョソと関わるとロクなことはない
ミューテックスについてなんですけど まずCreateMutex関数でオブジェクトを作成しますよね。 この関数の戻り値はオブジェクトに対するハンドルでして、プログラムは明示的にこのハンドルを閉じるには CloseHandleにより閉じるとあります。 ですが例えばペンやブラシのオブジェクトの場合 DeleteObjectで明示的にオブジェクトを削除しなければいけないのですが このミューテックス及びセマフォの様なオブジェクトはどういうタイミングでオブジェクトが削除されてるのでしょうか。 あんまし理解してなくてすいませんorz
>>474 CloseHandleすれば、削除されます。
厳密に即時削除されるかは定かではないけれど。
では例えば まず初回に一意のミューテックスを作成しますよね。 ミューテックスの名称をTEXT("hoge")とでもしておきましょうか そして後続のプロセスもTEXT("hoge")をCreateMutex関数にて作成しようとした場合 既にTEXT("hoge")のミューテックスオブジェクトは存在するのだから、そのオブジェクトのハンドルが返ってきます。 そしてプロセスが終了する時、又は明示的にCloseHandleを実行するとオブジェクトは破棄されるとありますが、 ミューテックスオブジェクトの所有権を取り合ってるプロセスが複数あるとして、そのうちの一つのプロセスを終了する場合 このミューテックスオブジェクトが破棄されてはまずいですよね 破棄されるならば所有権を取り合ってるプロセスが0個の時であるべきです。 このような時でもWindowsは自動的にオブジェクトを削除するタイミングを図っているのでしょうか
カーネルオブジェクトで具ぐれ
>469 オーナードローとか使ってて、LVITEMのstateではない 内部のメモリを参照して選択描画をしているとか。
481 :
デフォルトの名無しさん :2006/01/18(水) 09:06:34
ウィンドウサイズを変更できない親ウィンドウを作成したいのですが、 どの様にすればいいのでしょうか 対象となるウィンドウは解説サイトで取り上げられるような極普通のカスタムウィンドウです。 全然思いつかないのでそこら辺を取り上げてるサイトがあれば嬉しいのですが・・・
>>483 ウィンドウを作成するときに、WS_THICKFRAMEを指定しない
WS_OVERLAPPEDWINDOWとかは、
WS_THICKFRAMEを含んでるんで、要注意
WS_OVERLAPPEDのほうが要注意だけどな
>>485 (WS_OVERLAPPEDWINDOW | WS_VISIBLE) ^ WS_THICKFRAMEとした所
見事境界がなくなり、システムメニューの"サイズ変更"も無効になっていました。
ありがとうございます。ちょっと強くなった気分(*´Д`)
>>484 読ませていただきます
何この無能以前のミソッカス
>>434 と激甘教えたがりやども
489 :
デフォルトの名無しさん :2006/01/18(水) 11:45:57
いつからスレタイトルが「ハンゲは糞」になったんですか? もうやってられません。WinAPIは永久に不滅です。
「永久に不滅」って変だよね 頭痛が痛いみたいなもんで
永遠に不滅
>>494 いいじゃまいか
永遠に不滅です!!って誰か言ってた品
>>493 (^ω^ ):「狐うどんと狐そば、どっち喰う?」
(゚д゚):「おれ、狐そばがいい。。。おれは狐そばがい…」(^ω^#):「一回言えばわかるお」
みたいなイライラを感じずにはいられない
498 :
デフォルトの名無しさん :2006/01/18(水) 15:08:05
ウィンドウAから、子ウィンドウではないウィンドウBを呼び出します。 ウィンドウAで閉じる動作があった時、 ウィンドウBも閉じたいのでWM_CLOSE、WM_QUIT などを送った所、閉じられはするのですが、 Ctrl + Alt + Deleteで見て見ると、残骸が残っているようです。 ここら辺に詳しい方がおられましたら、問題点などを教えてください。
>>498 > 問題点などを教えてください。
・調査の仕方
・質問の仕方
に問題ありと思われ。
とあるサイトで、BOOL型とC++のbool型がどちらも真の場合の判定に、 BOOL b1 = func1(); bool b2 = func2(); if ( (b1 && b2) || ! (b1 || b2) ) { // 処理 } とあったんですが、これって if( b1 && b2 ) {} ではダメなのかな?と素人目に疑問が浮かびました… 上記の対処法の意図が分かりますでしょうか?
>>500 どうみてもWin32API関係ありません
どうみてもそれじゃダメです
本当にありがとうございました
502 :
500 :2006/01/18(水) 16:00:18
確かにAPI関係なかったです…スレ違いすいません ついでながらどうしてダメなのが教えてもらえませんか?
b1=FALSE, b2=false の時の事、考えてあげて下さい
504 :
500 :2006/01/18(水) 16:09:46
うっ…分かりません、本当に馬鹿なのかも知れません b1=0で抜けるんじゃないんですか? それともFALSEの定義の問題でしょうか…?
どちらも真の場合の判定と書いてるけど、 どちらも偽でも、通るように書かれてる とあるサイトとやらが勘違いしてるのか、 藻前さんが何か勘違いしてるのかは知らないけど >if ( (b1 && b2) || ! (b1 || b2) ) と >if( b1 && b2 ) は別物だよってこと
>if ( (b1 && b2) || ! (b1 || b2) )
>if( b1 && b2 )
このふたつの違いは分かるんです、でも「どちらも真の場合の判定」ですので、
>>505 さんがおっしゃったように
>if ( (b1 && b2) || ! (b1 || b2) )
ではダメなんじゃないかな?と思った次第です…
507 :
506 :2006/01/18(水) 16:24:21
名前欄505→500でした!
>>506 本当に「双方真の場合の判定」と書いてあるのか?
だとするなら、それじゃダメだと思ったおまいが正しい
511 :
500 :2006/01/18(水) 16:57:45
>>500 「オレはドモルガンの法則知ってるぜ」って自慢したくて
そんな風に書いたんじゃないの
まぁ間違ってるんだけど
>>511 文章の流れが不味いのは間違いないんだけど、
「安全な一致判定は、下記の通りに」って書いてあるじゃん。
「どちらも真」のコードだとは書いてない。
>>511 そのサイトでは一致判定の方法を書いてるんであって
両方とも真の判定を行ってるわけじゃない
よって、お前が悪い
515 :
500 :2006/01/18(水) 17:04:17
あちゃー、やはり私の読み違いですか。反省します… ということは先のコードで一致判定ができるということですね?むむむ…むずかしい スレ違いすみませんでした
BOOL b1 = func1(); bool b2 = func2(); としたとき、同じ結果である場合の判定は if (b1 == b2) { // 処理 } は誤りで if ( (b1 && b2) || ! (b1 || b2) ) { // 処理 } が正しい。 サイトの記述通り。もう一度熟読すべし。
どこにAPI使ってるんだ?
xmlでurlを指定するとblogshot.netのようなスクリーンショットの 画像を返すようなプログラムをwindowsで作りたいのだが、 どこから調べればよいですか? ちなみにlinuxでcは書いたことはあるが、 windowsでのプログラムはほとんど経験なし。 よろしく。
>>518 まあ頑張ってくれ
APIで何か疑問があったらまた鯉
GetMessege()が-1を返したときはどうすればいいですか?
エラー処理をすればいいと思うよ
Windowsって、ファイル名の大文字と小文字、区別しないんだな。 初めて知ったよ。 ていうかさ、ちょっとしたバックアップツール(差分コピー付)を 作ってたのよ。 バックアップ先に同名ファイルがあったら、退避するようにして。 で、まあ、当然日本語ファイル名は考慮するから、 コピー先に同名のファイルが存在しているかは、_mbsicmp()とかにするよな。 最初はこれ(_mbsicmp)が全角の"A"と"a"を同一視すると困ると思って試してみたけど どうやらちゃんと区別してるっぽい(bcc55)。 で、動作確認のために、 "A.txt" を "a.txt" が存在するディレクトリにコピーしようとすると、 CopyFile()が失敗。 まさかと思ってエクスプローラでも確認したら ちゃんと上書き確認が出やがる。 もしかして、Unicode版のAPIと_wcscmp()を使えば大丈夫か、と思って _wcscmpの動作を調べたら、 "A"と"a"は区別するくせに、"a"と"a"を同一視しやがる。 使えねー。 結局、自分で「同一ファイル名か確認する」コードを書くのが良いのかね? 部分比較(strncmp)もしたいし オリジナルのファイル名は尊重したいから、全部小文字に直すのは嫌だし。 比較のときだけ小文字に直す手もあるけれど。
api使えよ
FindFirstFileでいけないかね
525 :
522 :2006/01/18(水) 19:22:40
んー、適当なAPIあるかな? Pathxxxとかざっと見渡しても、良さそうなのが見つからないんだけど。 やりたいことは、バックアップと同期。そのために、 ・ターゲット側に同一ファイル名となるファイルが存在するかを確認 ファイルが存在する場合 そのままそのファイルに追記 ファイル名を生かしたまま、別ディレクトリに移動 ・コピー元側に存在しないファイルがターゲット側に存在するか確認 存在したら、別ディレクトリに移動 という感じ。 同名とみなせるファイルがターゲット側に存在するかどうかを確認するだけなら (実際にファイルシステムにアクセスするAPIを使えば)簡単なんだけど、 コピー元側のファイル1つ毎にOSを呼び出した上、 ターゲット側のファイルについても、 それぞれ毎回OS(ファイルシステム)にアクセスする必要があるよね? FindFirstFile()で一覧を取って、サイズやタイムスタンプで コピーする必要が無いときは何もしないようにしたいから 出来ればファイル毎に呼び出す形にはしたく無いんだけど。 さすがに毎回ディスクアクセスはしないとは思うけどさ。 で、FindFirstFileで取った"A.txt"と"a.txt"という名前を、 「同じファイル名である」と判定したいのですよ。
PathFileExists?
lstrcmp(茶ろわぁ("A.txt"),茶ろわぁ("a.txt"))
>>525 ::CompareString()をNORM_IGNOREKANATYPEとNORM_IGNOREWIDTHで
使うとか。
529 :
528 :2006/01/18(水) 20:28:09
この場合NORM_IGNORECASEか…
"A.txt" と "a.txt" って、Win9xでは区別される。 Win2Kからは区別されなくなったんだよな。NT4はどうだったかな?
531 :
522 :2006/01/18(水) 20:57:02
おー、ありがとう。
>>528-529 の方法(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE)で出来るっぽい。
と思ったら、
>>530 ですか。。。
532 :
522 :2006/01/18(水) 21:01:38
区別する、しないはOSかな?それともFSかな? もしOSだとしたら、9xで"A.txt"と"a.txt"の両方を(FATに)作って そのディスクを2Kで読んだらどうなるんだろう? とりあえず、適当にFATの領域を作って、 「2K+FAT」の環境での動作から確認してみよう。
XP上からFAT32に"A.txt"と"a.txt"はむりですた。
>>530 これ、初めて知った。(2K/XPでも全角a/Aは区別されると思ってた。)
で、実験君。
98で"A.txt" と "a.txt"をFAT32に作成し、このHDDをXPに接続。
DIRすると"A.txt" と "a.txt"の両方が見えるが、エディタで"a.txt"を開こうと
すると実際に開かれるのは"A.txt"。
"A.txt"を削除すると、"a.txt"が開けるようになる。
既に納品済みのもので、これでトラブりそうなのがある・・・・・
535 :
522 :2006/01/18(水) 21:31:35
おー、みんな実験ありがとう。
区別する/しないはOSの動作で、
FAT上に両方あると、NT系では一覧では見えるけど開けないってことか。
っていうか、やっぱ知らなかった人、俺だけじゃないよね。
俺も別扱いするものだとばかり思っていたから。
>>530 の、9xでは区別しなかったって聞いて、
そう思い込んでいた理由も納得した。
536 :
デフォルトの名無しさん :2006/01/18(水) 22:14:26
コンピュータが(Win2kだとCtrl+Alt+Deleteとかで)ロックされているのを 検出する方法ってありますか? ロックする方法はわかったんですが、状態を検出する方法がわかりません…。
"A.txt"と、"A.txt"は区別されるようだな。
538 :
520 :2006/01/19(木) 00:09:16
>>521 どのような処理をすればいいか分かりません。
解放するもん処理して終了すればいいじゃない
541 :
デフォルトの名無しさん :2006/01/19(木) 00:36:35
DLLをLoadLibrary()して、 DLL内部の関数をGetProcAddress()で取得後、そのDLL内関数を実行しました。 処理終了後、FreeLibrary()でLoadLibrary()の戻り値を渡したんですが、 その際に、関数内で宣言しておいた260バイトのchar配列の先頭エリア4バイトの 内容が破壊されていまいます。 なにか使い方が間違っているんでしょうか? 心当たりのある方いらっしゃいますか? XPpro SP2、VisualStudio.NET2003です。
おーい、誰かエスパー呼んでこい!
>>541 がエスパーをご所望だ
>>541 _stdcall とか _cdeclがらみ、と透視。
「DLL内の関数」が static char hoge[260] を return していると妄想
こんな感じです int AAAA(char *pszSrcPath, char *pszLzhFilePath) { HINSTANCE hXXXX; PFUNC pcsFunc; int iResult; char *pszHomeDir; char szHomeDir[MAX_PATH]; char *pszLastSep; // カレントディレクトリ取得 pszHomeDir = getcwd(szHomeDir, MAX_PATH); strcpy(szParentDir, "D:\\TEMP"); // 対象データが存在するディレクトリに移動する chdir(szParentDir); iResult = -1; // DLL読込 hXXXX = LoadLibrary("XXXXX.dll"); if (hXXXX != NULL) { // Unlha()APIの呼び出し pcsFunc = (PFUNC)GetProcAddress(hUnlha, "YYY"); if (pcsFunc != NULL) { iResult = (*(pcsFunc)(FALSE); } // DLL解放 // →ここまではszHomeDirは正しい FreeLibrary(hXXXX); // →ここにくると、szHomeDirの先頭4バイトが別な値に書き換えられる。 } chdir(szHomeDir); return(iResult); }
warota
せっかく伏字にしたのに「Unlha()APIの呼び出し」って・・・。
スプレッドシートを扱いたいのですが、どのような方法があるのでしょうか?
Excelを買えばいいよ
>>522 CopyFileの第3引数をTRUEにしたら?
それなら実際に同名ファイルが存在する場合以外は余分なAPI呼び出しは発生しない
>>545 > iResult = (*(pcsFunc)(FALSE);
カッコの対応も合ってないじゃん。
せめてコンパイルくらいは通して欲しいものだな。
# 出来れば、問題が再現する最低限のコードを、
# 再発する事も確認して載せて欲しいね。
>>545 pszHomeDirを参照するところやszParentDirをセットしてるところでメ
モリ破壊を起こしてるかもしれない。pcsFuncの呼び出しでメモリ破壊
してるかもしれない。
・変に省略するな
・unlha.dllを使うことを隠す必要なんてない
556 :
541 :2006/01/19(木) 11:22:56
543さんの透視の通りでした。 おさわがせしました。
HRESULTとかLSESULTって何でしょうか・
LSESULTに該当するページが見つかりませんでした。 検索のヒント キーワードに誤字・脱字がないか確かめてください。 違うキーワードを使ってみてください。 より一般的な言葉を使ってみてください。
560 :
498 :2006/01/19(木) 15:02:07
>>498 です。
9x系のバグのようです。
ttp://hp.vector.co.jp/authors/VA020994/Tips/sub3-2-013.htm 親を閉じる時、自動で一緒に子が閉じられたり、
オーナーを閉じる時、自動で一緒に非オーナーが閉じられますが、
それも手動の時と同じようにダメなようです。
もちろん、ボタンとかは大丈夫なので、
タイトルがあるウィンドウだとダメとかなんですかね。
いろいろメッセージの順序を工夫して実験しましたが、
親やオーナーのWM_CLOSEに誘発して
子や非オーナーを閉じる事自体がダメなようです。
子や非オーナーを閉じないと、親やオーナーは閉じられない、
親やオーナーを閉じようとした時、まず子や非オーナーが閉じられ、
もう一度親やオーナーを閉じようとすると、閉じる事が出来る、
みたいにしないといけないようです。
>>498 ウィンドウBでPostQuitMessage()を呼んでいたりしないよな?
後、WM_QUITは送るな。
って言うか、ウィンドウAのWM_CLOSEを受信に、
ウィンドウBにWM_CLOSEを送信するだけでいけない?
562 :
520 :2006/01/19(木) 17:05:59
>>498 A の WM_DESTROY ハンドラで B に WM_CLOSE を PostMessage すればOK。
だと思うけど。
564 :
498 :2006/01/19(木) 18:35:03
>>561 子や非オーナーの場合は、PostQuitMessageが
無くても大丈夫という意味ですか?
Bの方は、単体でも起動できるプログラムなので、
普通にPostQuitMessageをしていました。
実験してみます。
>>563 それをやっていますが、うまくいきません。
PostとSendを変えたり、Sleepでまってみたりしたんですが、
それではダメなようです。
>>564 > Bの方は、単体でも起動できるプログラムなので、
ウィンドウAとBは別のプロセスなのか?
状況があまりにも見えなさすぎ。
566 :
498 :2006/01/19(木) 19:24:54
567 :
498 :2006/01/19(木) 19:31:50
>>564 実験した結果はダメでした。
ただ、子、非オーナーなどBのウィンドウには
PostQuitMessageが必要ない事が分かり、勉強になりました。
PostQuitMessageの引数にhWndがないという事で、
hWndを終了というよりかは、hInstanceを終了する感じなんですかね。
>>566 モーダルとモードレスでは仕組みが違う。
そのサイトのやり方では藻前のやりたい事は出来ない。
基礎から勉強し直した方がいいよ。
>>566 ただのバグでしょう。
モーダルダイアログでDialog側のディスパッチループが走っている最中に
外側のディスパッチループを終了しようとしていたり、
シングルスレッドなのに「Sleepで待つ」とか書かれていたり、
ちょっと正常な設計とは思えません。
モードレスダイアログに変更してください。
というか、GetMessageのループを脱出するためのモノだな。 PostQuitMessageは。
571 :
498 :2006/01/19(木) 19:42:54
ありがとうございます。
>>568 >>569 キーワードをいただきました。
別ウィンドウの出し方は、それぐらいしか知らなかったので。
>>570 理解しました。
GetLastErrorとFormatMessage 使うときバッファの長さはいくらあれば足りますか
>>572 FORMAT_MESSAGE_ALLOCATE_BUFFERを指定すれば向こうでメモリ確保してくれる。
このときが(俺にとっては)LocalFreeを使う唯一の機会になっている。
なるほど
>>575 俺なんかあのサンプルをまんまコピーして使ってるよ
DIBとして確保したメモリって、連続していることが保証されてましたっけ。 それとも必ず pointer[x + y * width] みたいにアクセスする 必要がある(==最後にゴミがつく可能性がある)のでしたっけ。
DIBが4byte境界に揃えられない状況ってあったっけ?
おまいら心がすさんでるな。 丁寧におしえてやろうって言う心が無いな。 たとえスレ違いでもわかるなら答えてやるって心意気がほしいな。 おれは答えないけどな。
ピザでも食ってろDIB
581 :
デフォルトの名無しさん :2006/01/19(木) 23:54:44
582 :
577 :2006/01/20(金) 00:08:36
>>578 DirectDrawでのバッファなんかだとゴミが付くんですよね。
で、DIBはどうだったかなぁと。
583 :
デフォルトの名無しさん :2006/01/20(金) 01:05:20
タブコントロールを使いたいのですがいまいちわかりません。 2種類、CreateWindowで指定して作る方法とリソースファイルから作る方法がありますが どっちでやってもタブコントロールの上にボタンとかをおきたいのですが どっかいいサンプルなどおいてある場所教えていただけませんか?
swith (uint) case ... 以外でボタンが押されたことをあらわすやつってある? 質問の意味がわからない人は言ってください。 多分これでわかると思いますけど。わからなかったらスマソ
586 :
デフォルトの名無しさん :2006/01/20(金) 03:06:05
>>584 わたしも参考になりました。
ありがとうございます。
ちなみに
>>583 とは別人です。
あと質問させてもらいます。
エディットボックスで変換確定してエンターボタンを押すと
もうひとつのウインドウに表示させたいのですが、
エディットボックスで変換修正確定してエンターボタンを押すと
実質そのエンターボタンがIDC_BUTTONを押したときのような操作をするapiはあるのでしょうか?
質問の文がわかりにくいのはわかりますが・・同表現したらいいのかわかりません。
よろしくお願いします。
VC6にて、ActiveXでWebページ内で動くプログラムを作ってます。 リソースエディタでFORMVIEWのダイアログを作り、ClassWizard にて CFormView派生のクラスを作成。 CSampleCtl (プロジェクトをSampleとして作った場合のActiveX Controlのクラス) にて、 OnCreate で フォームビューのクラスを Create しているのですが、失敗してしまいます。(Create で 0 が返る) 失敗するのは、コントロールウィザードから TreeView(Microsoft TreeView Control) などをフォームに貼り付けた場合で、 スタティックテキストやエディットボックスのみのフォームでは失敗せず、ブラウザでの表示も確認しています。 TreeViewやListViewを使いたいのですが、どうすればいいのでしょうか。 プロジェクトは、プロジェクトウィザードのMFCActiveXコントロールから作成しています。
589 :
デフォルトの名無しさん :2006/01/20(金) 04:46:52
CreateThreadを勉強のために使っています。 CreateThreadに複数の引数を渡すには 構造体をつかうということがわかりました。 他のやり方がありますか?
乱数を取得するWINAPIって無いですか? C++で自作DLLを作ってるんですがプログラムサイズを縮小化したいので 乱数取得にMSVCRT.DLLのrand関数を使いたくないんですが
っつーかMTレベルが欲しいならアレだが MSVCRTと同じアルゴリズムのrandで十分なら 線形合同式一行書くだけだろ
ちょっと、毛色は違うけど CryptGenRandomとかはどーだwww
CryptGenRandom呼ぶよりは線形合同法を自分で書くほうが小さくなる希ガス。
http://www001.upp.so-net.ne.jp/isaku/rand.html /*UNIX*/
static long x=1;
void srand(unsigned s) { x=s; }
long rand() { x=x*1103515245+12345; return x&2147483647; }
/*DOS-Windows*/
static long x=S;
int rand() { x=x*A+C; return(int)(x
>>16 )&32767; }
void srand(unsigned s) { x=s; if (F) rand(); }
/usr/5bin/cc A=1103515245, C=12345, F=0, S=1
TurboC 1.5 A=22695477, C=1, F=0, S=1
Visual C++: A=214013, C=2531011, F=0, S=1
Borland C++: A=22695477, C=1, F=1, S=22695478
X[n]=A*X[n-1]+C (mod 4294967296)
乱数ってこんな単純な仕組みだったんですか?
うん
MTはもっと面倒だけどね。
標準Cのrandよりいいのか・・・
>>577 1lineがlong境界で揃うのは32bitDIBだけじゃないんですか?
8bitで横が4の倍数もか。
>>601 だけじゃない
幅、bppに関わらず常に4の倍数バイト
圧縮したときはシランがw
>>566 あの記事のコードでSendMessage{WM_COMMAND, IDOK}で終了することはできません。
メッセージループはGetMessageで待ったままになるからです。
DialogBoxの詳しい解説はJeffrey Richter:"Windows95:A Developer's Guide"
(新古書入手可能です)
あなたの要求を満たす方法は、単にCreateWindow/DestroyWindow
だけで良いと思います(メッセージループ不用)。
VC++超初心者会議室 はどこに行っちゃったんでしょうか?
605 :
デフォルトの名無しさん :2006/01/20(金) 18:53:52
複数のJpegファイルから動画ファイルを作成するソフトを作ろうと思って Windows Media Encoderを触っていたのですが、実現の方法がわかりませんでした。 そもそも、Media Encoderで連続したJpegからWMVって作れるのでしょうか???
605 Windows Media エンコーダ SDKを使ったことないけど エンコードはDirect Showではないだろか。
>>606 90日経ってから取り戻すつもりなのか?
絶対に業者に取られるな
すいません、ちょっとお尋ねします。 EnumWindows(EnumWindowsProc LPARAM)で、EnumWindowsProcを呼び出す時、 EnumWindowsProcにクラスや構造体のポインタを渡すいい方法って ありますでしょうか。
つ LPARAM
611 :
609 :2006/01/20(金) 21:39:54
早速のレス、ありがとうございます。う〜む、やはり渡すとしたら LPARAMで渡すんですよね・・・前に試した時は、KOUZOU* pSt; EnumWindows( EnumProc (LPARAM)pSt);と言う形で投げて、 EnumProc( hwnd, lp);でうけて、lp->member;と使おうとしたら、 「->の右にこれるのは、クラスのポインタだけじゃ!」 と怒られちゃったんですが、なんか私、勘違いしていますか? 重ね重ねの質問ですいませんが、よろしくお願いします。
KOUZOU* pSt = (KOUZOU*)lp; pSt->member; とか ((KOUZOU*)lp)->member; とかして元の型に戻さないと。
C++ならreinterpret_cast<KOUZOU*>(lp)->member推奨。
614 :
609 :2006/01/20(金) 22:07:16
>>612 ,613
そ、そうか・・・戻し損ねていたのか・・・orz
ご指摘、ご教授どうもありがとうございます。感謝、感謝です。m(--)m
615 :
498 :2006/01/20(金) 22:51:25
616 :
デフォルトの名無しさん :2006/01/20(金) 22:55:56
winmainからウィンドウ作らずにダイアログを作ったんですがこの状態で きーが押されてるとかとれますか?
教えてくんで悪いけど、良書があったら紹介して欲しい
>>617 Matt Pietrek:"Windows Internals"
Windows3.1の解析本。たぶん新古書入手可能。
Thanks
621 :
デフォルトの名無しさん :2006/01/20(金) 23:57:56
初歩的なこと聞きますが、 DrawTextで文字列をウィンドウに出力させるプログラムつくったんですが、 ウインドウに収まらず、縦スクロールつけたんですが、スクロールさせると 消えてしまいます。なんかいい方法あったらご教授ください。
InvalidateRect()
塚WM_PAINTで描いてねんでねか?
625 :
621 :2006/01/21(土) 00:37:06
WM_PAINTで書いてますよ。
ならWM_VSCROLL/WM_HSCROLL受けて よしなに描き直せば
今色々本見比べてるんだけどエントリポイント?が int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) int PASCAL WinMain(HINSTANCE hInst,HINSTANCE hPrev,char *CmdLine,int CmdShow); ってあるんだ。 WINAPIとPASCALってどう違うんでしょうか?
WTypes.h #define FAR _far #define PASCAL _pascal #define WINAPI FAR PASCAL ついでに言うとWin32では_far、_nearは意味を持たない。
>>628 スタックに積んだ引数を呼び出し側でpopするか、呼ばれた側でpopするかの違い。
>>629 それからWin32ではWINAPIは__stdcallだな(__pascalとはスタックに積む順番が違う)
>>630 それは__cdeclとの違い
>>628 Win16ではPASCALだったがWin32でWINAPIになった。
互換性のためWin32のヘッダでは#define PASCAL __stacallと定義されている。
蛇足だが本当にpascal形式が使いたければ__pascalと書けば使える。
633 :
628 :2006/01/21(土) 09:33:45
皆さんレスありがとうございます つまり今はWINAPIを使うのが普通って事ですか。 スタックに積んだ引数ってのが想像しにくい(スタックて後入れ先出しだっけ・・・ とりあえずおいて置きます
今はWINAPIを使うのが普通
>スタックて後入れ先出しだっけ 参照されるときは結局 [ebp+NN]とかアドレッシングしてアクセスされるから 後入れ先出しとは言えないですね。 呼ぶ側がパラメータをスタックにPUSHしてからCALLするだけだから 後入れ先出しの順はパラメータが左からか右からかの違いに相当します。
SetClassLong関数を用いて背景色を設定する場合 SetClassLong(hWnd, GCL_HBRBACKGROUND, (LONG)CreateSolidBrush(RGB(0,0,0))); などとすれば出来ますよね。 そこでCreateSolidBrush作成したオブジェクトについてなんですが、こいつは遅かれ早かれ 開発者がDeleteObject削除しなければなりませんよね? 今勉強しているサイトにはどこにも説明が無いので聞く所存なのですが、 HBRUSH hBr = CreateSolidBrush(RGB(255,0,0); SetClassLong(hWnd,GCL_HBRBACKGROUND,hBr); DeleteObject(hBr); の様に、SetClassLongで現在設定されているブラシは削除するのはまずいのでしょうか?
まずい WM_DESTROYWINDOW あたりを受け取ってから DeleteObject
皆さん、 一番かっこいい名前のWin32APIって何だと思いますか?
IReconcilableObject::GetProgressFeedbackMaxEstimate
やっとこのスレに書き込まれていることが大体理解できるようになった 完全に理解するにはあと3ヶ月だな
>>636 MSDNのWNDCLASSEXの項にはUnregiserClassExを呼んだ時に背景のブラシは削除されると書いてある。
あと、SetClassLongPtrを使いなさい。
642 :
デフォルトの名無しさん :2006/01/21(土) 14:46:07
リストボックスのテキストを全部または特定の行だけ消す方法がわかりません。 タブコントールにリストボックスをくっつけて特定のタブが選択された時に そのタブにのっかってるリストボックスにテキスト表示はできたんですが、 WM_PAINTのときに書いてたらタブを一度他のところに切り替えてもう一度タブ を戻したら表示させたテキストが複数になちゃいました。 そうならない方法どなたか教えて頂ければうれしいです。
>>638 SetLayeredWindowAttributes
>>640 3ヶ月後にはこのスレに書き込まれていることが釣りに思えてくる
実際釣りなんだがな
647 :
デフォルトの名無しさん :2006/01/21(土) 20:54:07
スクリーンセーバーが起動したりスタンバイしないようにソフトウェア側で制御するには どうしたらいいでしょうか? ウィンドウズメディアプレイアーを再生しているときみたいに、 自分のアプリケーションが起動している間はスクリーンセーバーが 起動したりスタンバイ状態になってほしくないのです。 Winsockで通信中にスタンバイ状態になると挙動がおかしくなるので困っています。
>>647 SystemParametersInfo()でSPI_SETSCREENSAVEACTIVEを使って
スクリーンセーバーが動いてることにしちゃったり、
WM_POWERBROADCASTを処理してBROADCAST_QUERY_DENYを
返したり。
649 :
647 :2006/01/21(土) 21:27:24
>>648 ありがとうございます。
やってみます!
>>647 SystemParametersInfo()は推奨できない。
自分のアプリケーションがアクティブなときだけ拒否したい場合は
WM_SYSCOMMANDメッセージのSC_MONITORPOWERと
SC_SCREENSAVEにFALSEを返せば防げばいい。
WinSockで問題があるなら、スクリーンセーバーはどうでもいいと
思うので、WM_POWERBROADCASTのPBT_APMQUERYSUSPENDを
処理すればいいかと。
あるいは、スタンバイ状態に移行するときと復帰したときの処理を
ちゃんと書いて、スタンバイ状態になっても問題ないようにするとか。
>>650 スレタイを100回ぐらい読むといいよ
当然、大声でやると効果的
>>652 何言ってるんですか?
TreeViewもListViewもWin32APIで作れるじゃないですか。
プロジェクトは、プロジェクトウィザードのMFCActiveXコントロールから作成しています。
100回じゃ足りない奴もいるってことか、勉強になるスレだ
死ねばいいってことでFA?
650≠653なんて言っても興味ないと思うけど、つまりMFC相談所にいけと。 ActiveX関係がなかったんでWin32でここに書いたんだけど、誘導ってことでMFC相談室行ってきます。
658 :
デフォルトの名無しさん :2006/01/22(日) 15:35:53
Win32APIって全部スレッドセーフなんですか?
>>659 俺は全部がスレッドセーフかどうか知らないけど、中にはこんなのも存在する。
そもそも作成したスレッドからしか触れないからスレッド安全かどうか気にする必要のないというものもある。
ヒープ関係の関数はスレッドセーフにしない代わりに高速化するという指定を与えられる。
計算結果をウィンドウを開いて描画しようと思ってます。 printf,scanfなどの関数を併用することはできますか? 描画はできるんですけどこういう関数は全部無視されちゃいます。 ちなみにborland c++ compiler5.5使ってます
printf()とかscanf()はコマンドプロンプトとかにしか使えない WinAPIには文字出力とかの概念は存在しないからTextOut()で文字を描画する
663 :
661 :2006/01/23(月) 02:42:28
ありがとうございます。 じゃあ、ファイルポインタ使ってデータファイル読み込み→ 計算→描画 的なことはできないんですかね?
は? TextOut使えって言ってるじゃん?
665 :
661 :2006/01/23(月) 03:00:36
説明が悪かったです。すいません。 データファイル読み込み→計算→計算結果を図で描画 ということをしようと思ってます。
>>661 ,663
計算結果をテキストで出力したいだけなら、
コンソールアプリケーションにする。
GUIを使いながらprintf等も使いたいなら
AllocConsole()を使ってコンソールを割り当てると楽。
667 :
661 :2006/01/23(月) 03:20:18
>>666 ありがとうございます。AllocConsoleでscanfも使えますか?
scanfでデータファイル名指定、データファイルを読み込んで計算
ということもやりたいんですけど。
やってみれ
669 :
661 :2006/01/23(月) 03:27:16
>>668 やってみます
こんな時間に付き合っていただいて本当にありがとうございました。
おやすみなさい
テンプレにある猫でも〜〜 1章〜15章あたりで勉強すると良いよ
>>661-671 sprintf()やsscanf()に一言も触れないのか?
潜在的なセキュリティリスクに関する議論も再燃するはずだったのだが。
独りでやってろ
再燃再燃再燃再燃セキュリティリスク 再燃再燃再燃再燃セキュリティリスク 再燃再燃再燃再燃セキュリティリスク 再燃再燃再燃再燃セキュリティリスク 再燃再燃再燃再燃セキュリティリスク 再燃再燃再燃再燃セキュリティリスク 再燃再燃再燃再燃セキュリティリスク 再燃再燃再燃再燃セキュリティリスク
sprintf()やsscanf()というAPI
sscanf()はまだしも、何でsprintf()が出てくるのだろう。
彼は最近ようやく知った情報を、語りたくてしかたなかったのだよ
678 :
デフォルトの名無しさん :2006/01/23(月) 15:48:08
自プロセスが動かされているユーザを他のユーザに切り替える事は可能ですか? CreateProcessAsUserで別プロセスとして起動させるしかないんでしょうか?
679 :
デフォルトの名無しさん :2006/01/23(月) 16:20:30
通常のウィンドウ内で日本語入力した時に出る文字達の位置を エディタの様に変えることは出来ないでしょうか?
>>679 できるはず。できるからこそエディタはそうなっているんだ。
俺もやりかたは知らないけれどとりあえず。
WM_IMESTARTCOMPOSITIONでImmSetCompositionWindow
>>676 前スレで脆弱性になる/ならないで論争やったからじゃね?
諸々のハンドルの多くは実行ユーザに対してのみアクセス権限が割り当てられている。 プロセス実行中にユーザを切り替えることが可能になったら、 他のユーザに切り替えたあと、あらゆるハンドルが扱えなくなるので、メンテナンスが面倒だと思う。 ハンドルを子プロセスで継承可能&ユーザアクセス権限を設定して、 ハンドル値を子プロセス実行文字列の引数や共有メモリで渡すことでハンドルをそのまま使える。
どうせアクセス権を設定しなきゃならないなら その後子プロセスを作っても作らなくても面倒さに変わりはないんじゃね?
新たに設定するユーザの権限外のアクセスが(既存ハンドルを通じて)行えると、 セキュリティホールの原因になるんじゃない?
>>684-685 チャットじゃないので疑問形で同意を求める風を装う甘えた文章はやめろ。
断言できないのなら回答するな。
今日も機嫌が悪いなw
ここは質問スレ。質問するなら質問しろ。回答するなら回答しろ。 断定を避けつつ他人の同意を求める文章は荒らしも同然。
まあ、689みたいな書き込みも一種の荒らしなんだけどな。
>>690 他の荒らしを黙らせるための書き込みは構わないと思う。
>>684-685 ピントがずれてる。
結論からいうと、必要性が判らないうちは回答するなということだ。
末尾を?にすれば許してもらえるなどと思わないほうがいい。
?
>>692 の1行書き込みの方が
>>684-685 よりはるかに好感がもてる。
断言できない読書感想文的な無駄なオナニー書き込みより罵倒の方がはるかにマシ。
!
自演乙w
たかが語尾ひとつでそこまでキモく粘着できるのが信じられんが そんなに断言してほしけりゃしてやる どうせアクセス権を設定しなきゃならないなら その後子プロセスを作っても作らなくても面倒さに変わりはない。 新たに設定するユーザの権限外のアクセスが(既存ハンドルを通じて)行えると、 セキュリティホールの原因になる。 正直何が違うのかさっぱりだね
698 :
678 :2006/01/24(火) 00:53:28
変なこと聞いてすいませんでした。
なんだこの流れ
なんだこのスレもLDショックかよ。 だからあれほど素人は(ry
アクティブじゃなくてもキーボード操作に反応するようにしたいのですが どうやればいいですか?
GetAsyncKeyStateをタイマでも使ってポーリングしとけば。
効率ワルwww
効率のいい方法とやらを教えてくれないか
タイマだったらどうしてもラグがあるから グローバルフックの方がいいかと
706 :
デフォルトの名無しさん :2006/01/24(火) 09:12:06
質問させてください。 win2k,VC6で開発をしています。 ユーザーアカウントに独自の追加情報を加える必要があり色々と 調べてみた結果。windowsのアカウント設定ツールからは使われて いない(NetUserSetInfoで実際に設定してみて、設定ツール上の どこにも反映されていないことで確認しました)USER_INFO_*構造体の usri*_usr_commentの部分に追加できないかと考えています。 ですが、実際に使用するにあたって本当にユーザーが勝手に使ってよい 領域なのかどうかいまいち確証がもてずに困っています。 usri*_usr_commentの使用についてのドキュメント等をご存知の方が 居られましたらお教えいただけると助かります。 よろしくお願いします。
707 :
デフォルトの名無しさん :2006/01/24(火) 11:20:53
自分で自身を解放するクラスをつくりたいんですけど、 void test () { CTestClass *t = new CTestClass() ; } test()で、CTestClassが確保されて起動、その後CTestClass内で処理が必要なくなったら自身を消して解放みたいな。 やっぱりマネージャクラスのようなものが必要なんでしょうか?
delete this;
つ 「200%スレ違い」
711 :
707 :2006/01/24(火) 11:57:52
レスどうもです。 >delete this; ほんとだ、消えた!。 自分は消せないと思ってた、勉強不足でした。
712 :
679 :2006/01/24(火) 12:42:57
ありがとうございました。 無事解決しました。
deleteの動作を理解してれば自分を消せないなどと思わなかったろうに
714 :
デフォルトの名無しさん :2006/01/24(火) 15:05:42
CBindStatusCallbackを使ったサンプルコードどっかにないですか? googleしまくってんだけど、なかなか参考になるコードが無くて、よろしくお願いします。
スレ違いATLスレにでもいてら
サウンドカードからのデジタル出力を停止させるAPIって存在するの でしょうか?アナログからの出力はできてもかまわないのですが、デジタル 出力だけ停止させたいのですが。
717 :
デフォルトの名無しさん :2006/01/24(火) 16:07:49
c:\hoge\fuga\moge\unko.txt っていうファイルを作成したい。 hogeもfugaもmogeも存在しないとき、一気にディレクトリつくるAPIなかったっけ?
SHCreateDirectoryExかね
MakeSureDirectoryPathExists()
ちょっとライブラリ使おうとして プラットフォームSDKをダウンロードしようと思ったら、 MSNになくなったようです。 SDKに変わるものって何になるのでしょうか? 環境はwin2kとXPです。 馬鹿にも解るように優しく教えて下され
MSNにあったらビックリだな。
722 :
717 :2006/01/24(火) 16:40:48
うちの古いMSDNライブラリにないと思ったら、 SHCreateDirectoryExってWinMeや2000以降なのね。
うむ、挙げてから気づいてちょっと使いづらいかなと思った。
725 :
デフォルトの名無しさん :2006/01/24(火) 17:38:47
制限ユーザの為に、レジストリーに書き込めないんですけど、回避方法ありませんか?
ini
727 :
725 :2006/01/24(火) 17:51:58
COMコンポーネントの登録の必要があるんですが、iniファイルで代用できるって事ですか?
最初からそういえコラ
>>727 Windows XP なら manifest で出来る。
>>701 普通にグローバルキーフック
猫でもSDK編161章
732 :
720 :2006/01/25(水) 01:07:07
D抜けてるし_| ̄|○ 意味は通じてるんだから 教えてくれても良いのに(´・ω・`)
俺は素でMSNだと思ってた つかMSNってまだやってるのかね
IEのデフォルトスタートページがMSNですよ。
LRESULTってなにを返せばいいの?
>>732 MSDNのDLサイトから消えたのは2003のSDKに一本化されたからじゃないの?
>>735 特に必要が無ければ0を返せば良い。
これ位訊かなくても本に書いてあるだろ。
739 :
デフォルトの名無しさん :2006/01/25(水) 12:52:23
>>706 情報タダ取りか?
ちゃんと結果を報告しろよ、クズ!!
740 :
デフォルトの名無しさん :2006/01/25(水) 13:11:19
デスクトップ上のウィンドウをWnumWindows関数で列挙して それを全部半透明にするとデスクトップが暗くなります。 最初はデスクトップまで半透明になっているから暗くなってるのかと思ったのですが、 デスクトップのハンドルを除いて、後を全部半透明にしても暗くなります。 (というかデスクトップのハンドルは列挙されていないっぽい) デスクトップをそのままにして、他を全部半透明にするにはどうしたらいいでしょうか?
暗くなるってどんなのよ? 単に暗い色の壁紙が透けて見えるようになったから、とかじゃないだろうな?
spy++で壁紙部分のウィンドウが何かみてみろ。
"Program Manager"というウインドがそれっぽい。
744 :
デフォルトの名無しさん :2006/01/25(水) 13:31:09
borland c++を使って勉強中の者です。 不器用なので、フリーのリソースエディタを上手に使えなくて DialogBoxIndirectでダイアログを作成する事にしたんですが DialogProcのWM_INITDIALOGで、自前のクラスをnewしたら deleteする時に止まっちゃいました。 ためしに、DialogProc内にstaticで持つのを止めグローバルにして DialogBoxIndirectから処理が返ってきた後、deleteしたんですが それでもダメでした。 DialogBoxIndirectで作成したダイアログに貼り付けた 子ウインドウを、無事に削除する方法を教えてください。 よろしくお願いします。
745 :
デフォルトの名無しさん :2006/01/25(水) 13:32:14
{ static CListView *listview = NULL; switch(uMsg){ case WM_INITDIALOG: if((listview = new CListView(hwndDlg)) == NULL){ ERROR; } return TRUE; case WM_COMMAND: switch(LOWORD(wParam)){ case IDOK: ここで止まる→delete listview; EndDialog(hwndDlg, IDOK); return TRUE; } break; } return FALSE; }
GetDesktopWindow();
>>744 borland c++はよく知らないけど
ダイアログがでてる間に消しちゃダメだろ
自前のクラスにバグがあるのでは?
ウインドウ作ったらDestroyWindowで破棄する。 子ウインドウの場合は親がやってくれるから自分で破棄する必要はない。 だからdeleteするとすればダイアログが閉じた後で
>>744 貼りつけた子ウィンドウはどこでどうやってcreateしたのですか?
CListViewのデストラクタがおかしいんじゃねの?
752 :
デフォルトの名無しさん :2006/01/25(水) 16:52:11
解決にならないだろうけど・・・ if(listview!=NULL) { delete listview; listview = NULL; }
>>745 止まるって、具体的にはどうなる?
delete が返ってこないということ?
それともそこでエラー?
754 :
725 :2006/01/25(水) 19:55:24
制限ユーザでのレジストリーに書き込み(コンポーネントの登録)の件ですが
>729
>Windows XP なら manifest で出来る。
成功しました情報ありがとうございます。
http://www.microsoft.com/japan/msdn/windows/windowsxp/sidexsidewinxp.asp このサイトが参考になりました。
>731
>>725 >>727 HKEY_CLASSES_ROOT以下は制限ユーザーでも書き込めると思うが。
HKEY_CURRENT_USER以外は書き込みが出来ませんでした。
XPでは起動に成功を見たのですが、以前2000での起動が出来ません。
何方か解決方をご存じの方はいらっしゃいませんでしょうか?
具体的には、制限ユーザで自作したアプリをインストールし動作させようとしているのですが、
動作には、インストーラに同梱したコンポーネントが必要なのですがこのコンポーネントのシステムへの登録が
制限ユーザでは出来ずに、起動に失敗してしまいます。(regsvr32で登録エラーを起こしてしまいます)
以上です、よろしくお願いします。
755 :
デフォルトの名無しさん :2006/01/25(水) 20:50:57
GetCursorInfoがエラーする。 compileは通るんだけど、実行すると戻り値が0で、ラストエラーは「パラメータが間違っています。」(コードは87) ん〜、誰か教えてぇ〜〜〜
cbSize
>>755 パラメータが間違ってる、と親切に教えられてるのに、
何故、無視するのだね?
>>745 そもそもnewは例外を投げるからNULLかどうかの比較は意味がない。
どうしてもやりたければstd::nothrow。
if ((listview = new(std::nothrow) CListView(hwndDlg)) == NULL)
VC だか何だったかは new に失敗しても、例外を投げずに 0 を返した気がする。 なので、念のためチェックしといた方が良いと思う。
>>759 744-745はBorland C++と書いてある。おそらく無料版だろう。
そいつのnewは例外を投げる。
VC++6だな。 VC++2003だと、C++のヘッダをインクルードすると、例外を投げるようになるはず。
>>760 ,761
ほほー、勉強になりました。
サンクス。
763 :
740 :2006/01/25(水) 23:09:21
>>741-743 ありがとうございます。
見た感じですが、デスクトップの画面の大きさの
真っ暗なウィンドウがある感じです。
根拠は、半透明にしてから同様の方法で全てのウィンドウの透明度をなくした場合、
デスクトップが真っ黒になるからです。
"Program Manager"を調べてみます。
764 :
740 :2006/01/25(水) 23:21:03
ウィンドウハンドルからキャプションを取得して、 "Program Manager"を持つウィンドウを除いたら解決しました! ありがとうございました!
printfでAとWが切り替わるのはどれになりますか?
エスパーの方、出番です。
ワロス、全然分かんねぇw
wprintf, _tprintfとかをご所望ニカ?
_tsetlocale _tprintf
770 :
デフォルトの名無しさん :2006/01/26(木) 06:24:48
仕事の関係でドイツ語版のWindowsXPを使っているんだけど、 テキストを入力するときに言語バーのところで日本語を選べるものと 選べない物があるんだけど、これってどういう風に作ると選べるように なるかわかる人いる? 具体的にはIEのフォーム(URL入力欄はNG)や Office系はOK。秀丸、EmEditor、xyzzyに始まりEclipse、VisualStudio等 ほとんどのテキストエディター系は入力不可。 正直仕事に支障が出ているので簡単なテキストエディタを作ろうと 思ってるんだけど、普通にTextBoxを配置しただけではやはり日本語は 選べないみたい。ヒントでもいいので何か情報求む。 スレ違いなら誘導お願いします。
GlobalIMEがどうこう、と言う話はきいたことあるな。
コントロールパネルの地域と言語のオプションでドイツ語追加して試してみたら(WinXPSP2)、 VC6.0は入力した文字が?になってだめだったけど、秀丸(5.13b2)、メモ帳、VS2003では入力できた。
フォルダを開いたときなどに鳴るカチッっていう音は プログラム上では、どうやって鳴らすんでしょう?
OpenFolder
既定のサウンド設定
外してるような気がしつつMessageBeep
WMCreateIndexerの使い方教えてください。 ASFファイルにインデックスをつけたいだけなのですが。
779 :
デフォルトの名無しさん :2006/01/26(木) 17:49:17
ブラウザでエンコードを自動判別していますが、 あの処理ってどこから情報を取ってくるんですか? ダウンロードしたhtmlを解析して? それとも、HttpSendRequestに対応するフラグがあるの?
・HTTPヘッダ ・BOM ・meta要素 ・ファイルのバイト列の癖から類推
・永年の勘
783 :
774 :2006/01/26(木) 18:27:11
特定のキー(たとえばCtrl-Spaceとか)を押すと、 自作のウインドウアプリケーション A (起動済みでバックグラウンドかアイコンになってる)が フォアグラウンドかつフォーカスがあたるようにしたいのですが、 A の中でどういうAPIを使って操作をしておけばいいでしょうか。
RegisterHotKey でできる。 WM_HOTKEY を受け取ったら、フォアグラウンド & フォーカスの処理をすれば良い。
グローバルフック
激しく右フック
ストリームの一覧を所得したいです
そうですか 俺は五億円ほど所得したいです お互いがんばりましょう
コンソールが勝手に閉じて動作が分かりません どうすればとまるの?
>>792 なんのこっちゃ?
VC6ならCtrl+F5とか
あ、VC6じゃなくてもか VCならCtrl+F5
昔懐かしのgetch()
apiと関係あるか?
799 :
779 :2006/01/26(木) 21:52:27
>>799 IMultiLanguage2::DetectInputCodepage
802 :
799 :2006/01/27(金) 08:18:50
>>801 インターフェイスがあるんですねー。
調べてみます。
ありがとうございます!
803 :
778 :2006/01/27(金) 09:34:44
Windows Media Format SDKをインストールして サンプルのdscopy.cppを↓のように書き換えました。 int __cdecl _tmain(int argc, TCHAR *argv[]) { USES_CONVERSION; // Initialize COM HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if (FAILED(hr)) return hr; WCHAR wszTargetFile[MAX_PATH]; MultiByteToWideChar(CP_ACP, 0, "c:\\hoge.asf", -1, wszTargetFile, NUMELMS(wszTargetFile)); hr = IndexFileByFrames(wszTargetFile); CoUninitialize(); return hr; } 実行すると↓のエラーが出ます。 Indexing Failed (hr=0x8000ffff)! Press any key to continue 何かわかる人はいらっしゃいませんでしょうか?
居るんではないでしょうか
>>803 その問題とは関係ないけど:
USES_CONVERSION 使えるなら IndexFileByFrames( A2W("c:\\hoge.asf") ); でいいし、
さらにこんなテストなら IndexFileByFrames( L"c:\\hoge.asf" ); でも十分だと思う。
806 :
デフォルトの名無しさん :2006/01/27(金) 13:29:00
指定パス下を一括で読み取り専用解除する方法ってないですか? 1つ1つSetFileAttributesするしかない?
system( "attrib -R * /S /D" );
Beep() って鳴らしつづけるの無理?
while( 1 ) { Beep( 100, 10000 ); }
810 :
778 :2006/01/27(金) 17:49:02
CopyASF()を呼べばインデックスをつけてくれるようですが 再エンコードするみたいで時間かかりますね。 インデックスだけつけたいのですが、困りました。
>>809 説明が足りなかった。
非同期で鳴らし続けるってこと。
しかもそれじゃ10秒ごとにプチプチ言うよ。
途中で止められないし。
812 :
778 :2006/01/27(金) 18:03:38
昔は 10 BEEP 1 でよかったね。
>785,786 RegisterHotKeyとグローバルフックの両方を試して、上手くいきました。 グローバルフックでは、キーを押しても反応しないアプリケーション (キー入力を吸い取ってる?)があるようなので、 今回はRegisterのほうを使います。ありがとうございました。
ウィンドウをクライアント領域のサイズを指定して生成することができる関数ってないでしょうか? 横スクロールゲームなので指定サイズのクライアント領域を持ったウィンドウが必要だす
816 :
デフォルトの名無しさん :2006/01/27(金) 20:31:07
1. アクティブなウィンドウをデスクトップの一番下に沈めて 2. 1.の後一番手前に来たウィンドウをアクティブにする というユーティリティを作りたいんですが、2.のウィンドウを検索する方法がわかりません。 どう書けばいいんでしょうか?
>>816 GetWindowのGW_HWNDNEXTでいいんじゃない?
それと、Win98、Win2000以降はSetForegroundWindowに
制限があるので要注意。
>>818 MSDNドキュメントを鵜呑みにしたか?
ドキュメントにあるような制限は実際にはない。
821 :
デフォルトの名無しさん :2006/01/27(金) 22:14:55
>>819 分かってないのはお前の方だ。あの制限は全部ちゃんとある。
しかし、フォアグラウンドプロセスからSetForegroundWindowを
呼んだ場合は、普通に実行できる。(これも書いてある)
あの制限は主に、フォアグラウンドではないプロセスから
SetForegroundWindowを呼んだ場合のもの。
816のやろうとしている事は明らかに、SetForegroundWindowの
制限に引っかかる。
>>821 本当に自分の目で確認したのか?
実際にテストコードを書いて試したか?
福井県ってほんとに実在するのかな? 友達に訊いてまわったけど自分の目で福井県を見たやつは 一人もいないんだ。
目で見えないから存在しないというのは 愚かな思い違いだ
SetForegroundWindowうまくいかんのよねえ HWND_TOPMOSTで代用してるけど これはこれで色々問題あって
>>821 の色よい返事はまだ?
(・∀・)ニヤニヤ
>>819 の根拠ってなんなんだろ。
流出ソースでも読んだのかな。
漏れが試した範囲ではXXXだから、
誰のどのPCでもそんな制限など付かないはずニダ
とかじゃないだろうな・・・
カスタマイズ系のソフトで HKEY_CURRENT_USER\Control Panel\Desktop\ForegroundLockTimeout がいじってあったりすると「ドキュメントにあるような制限は実際にはない」と思えちゃうかも。
あと実験コードちょろっと書いて、デバッガで実行すると >?フォアグラウンドプロセスがデバッグ中である。 により、制限が無いように見えちゃうとか。
つまり、福井県は実在するの?しないの?
>>825 うまくいかないってのが、タスクバーでボタンが点滅するだけ
っていうのならば、それがSetForegroundWindowの制限。
820のリンク先にその制限を突破するコードがある。
>>819 ,822,826,830,832
いい加減痛いから、それ以上恥の上塗りをするのはやめた方がいいぞ。
>>830 830ha
ドキュメントに「XXXはダメ」って書いてあっても、
自分の環境で試してOKだったら行うのかい?
漏れはそんなことしたこと無いよ。
逆にドキュメントでOKとなっていても、
試してダメ⇒回避コード作成ってのはあるけど。
835 :
デフォルトの名無しさん :2006/01/27(金) 23:46:04
スレ違いかもしれませんが質問させてください。 ファイル(アイコン)のドラッグドロップはDragAcceptFiles()使って WM_DROPFILES取れば得られるみたいですけど、 リッチテキストのテキスト等のドロップはどういう仕組みで行われているのでしょう? visualstudioのコードエディタとMSNメッセンジャの入力フォーム間とかでもD&Dできるので アプリ内じゃない処理が行われてると思うんですが。 他のアプリのリッチテキストからのD&Dを許可する方法なぞあれば教えてください
('A`)
drug & drop out
どうしても思い出せないので質問させて下さい。 "C:\test1\test2\test3\" というディレクトリを作りたいとき、 test1 や test2 の存在しなくても、一発で test3 までの ディレクトリを作成してくれるAPIがあったと思うのですが、 どなたか教えて頂けないでしょうか? 確か、winhelp.dll の MakeSureなんとかかんとか API だったと思うのですが。。。
こないだ出たばっかりだな
841 :
839 :2006/01/28(土) 03:07:51
>>840 すいません。719で既出でした。
スレ汚し失礼しました。
843 :
デフォルトの名無しさん :2006/01/28(土) 07:43:48
9xでCreateRemoteThread()と同じことをやるにはどうしたらいいのでしょうか?
>>843 多分無理と思う。DLLインジェクションがやりたいのなら、SetWindowsHookexでもできると思うが。
多分9x系で使えるはず
スタンバイから復帰するためのAPIってありますか?
>>846 スタンバイ状態の時はアプリケーションは動作していないと思うが?
ワロスww
>>846 一応、SetWaitableTimerで出来るが、お前さんのやりたいことは
これでいいのか?
それくらい推察しないと エスパーとしては失格です。
既に起動してる別のプロセス(自作)にちょこっと仕事させて、処理が終わり次第 自分が復帰する状況を実現したいです。安易には // 何か処理 SendMessage(...); // 別プロセスに投げる。ハンドラは記述済 // 何か処理 というのを思いつきます。他に名前付きイベントオブジェクトで // 何か処理 SignalObjectAndWait(...); // 別プロセスを起こし、処理終了後SetEventなど呼ぶ // 何か処理 などともできそうです。どう実装してもいいんですが、なるべく パフォーマンスを良くしたいです。 どちらかと言われれば、どちらを選べばよいでしょうか?
852 :
846 :2006/01/28(土) 20:35:42
>>849 それです!ありがとうございます。
エスパー合格です。
>>847-848 おいおい何年前のPCの話してんのよw
スタンバイから(RTC等で)復帰なんてAPMの当時から実現してるってw
でなきゃタスクスケジューラは魔法か何かかw
そういうレベルの話はしてないと思うよw
そういう話じゃないの?
おいおい何のレベルの話してんのよw
そういうことで、はい次、次。 あ、Wake on LAN でも起こせるよ。
858 :
108 :2006/01/28(土) 20:52:23
>>846 852
おまえ
>>105 でも同じ質問してたろ
108で答えてんのに無視しやがって
梨の礫だけはやめろ
もう回答も出てこれにて一件落着なんだから、 自分が賢いことを証明する為に言い争うのはやめれ。
860 :
846 :2006/01/28(土) 20:55:45
別人です。すみません。 過去の発言を見ないで質問したためこんなことになりました。
>>860 あ、そーでしたか。こちらこそ失礼しました。
MSDNのサンプルで分ると思うけど
「ロック音」ってオープンソースのアプリあるから
それ参考になるかもよ。
>>861-862 どこのスレだか忘れたけど
かなり前にも同じ質問の回答で無視されたもんで、つい
864 :
846 :2006/01/28(土) 21:22:37
サンプルまで教えていただきありがとうございます。
865 :
デフォルトの名無しさん :2006/01/29(日) 00:42:16
このソースでファイルを開くダイアログが出ないのですが、何が原因なのでしょうか。 ----- OPENFILENAME ofn; char szFileName[MAX_PATH] = "*.txt"; char szFile[MAX_PATH] = ""; memset( &ofn, 0, sizeof(ofn) ); ofn.lStructSize= sizeof(ofn); ofn.hwndOwner= hWnd; ofn.lpstrTitle= "ファイルを開く"; ofn.lpstrFilter= "テキスト文書 (*.txt)\0Perlスクリプト (*.cgi)\0*.cgi\0すべてのファイル (*.*)\0*.*\0\0"; ofn.lpstrFile= szFileName; ofn.lpstrFileTitle= szFile; ofn.nMaxFile= MAX_PATH - 1; ofn.Flags= OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.lpstrDefExt= "txt"; GetOpenFileName(&ofn);
>>865 コピペで出るが他に何かおかしなことしてないか?
BCC5.5.1でもコピペでちゃんと動いた罠
870 :
デフォルトの名無しさん :2006/01/29(日) 12:11:12
関連づけを変更して自分のソフトで開くようにしたいのですが、 レジストリをいじるのだと思いますが、どのようにやればよいのでしょうか?方法を教えてください。
871 :
867 :2006/01/29(日) 12:21:04
>>868 そっちのOSは2000かXPなんでしょ。
commdlg.hと867のリンク先と
ttp://diarynote.jp/d/59398/の中ほどの項をよく読んでみてよ 。
できればWindows2000発表前の古いSDK(VC6付属のとか)のcmmdlg.hも。
Windows2000で構造体のサイズが拡張されたけど
拡張後のサイズ88で9xやNTで動かそうとしたとき起こる。
なのでBCCに限らず、VCでも起こりうる。
(フリーズするのではなくて、表示されずにそのままスルーされる。)
865の実行環境は9xかNTなのでは?
>>865 とりあえず
lStructSize=OPENFILENAME_SIZE_VERSION_400;とするか
#define _WIN32_WINNT 0x0400としてみてよ
それで駄目なら他の問題だ。
>>869 英語版も合わせてよく読め。SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE を
指定するのは、SetForegroundWindowの動作を、95,NT4と同じようにするために
アプリのインストール時に恒久的に変更する場合のことだ。
pingツールを作成したいのですけど、(正確にはICMPプロトコル使用のクライアントソフトです) 知識が足らないばかりかソケットの作成はsocket関数で行い インターネットの場合引数にAF_INET、TCPならSOCK_STREAM ... 程度の事しか判りません。 どこかWinSockでの指針を示しているサイトはないでしょうか・・
icmp.dll
>>874 ありがとうございます。ちと勉強してきます
>>870 「関連付けを変更するためには、レジストリをどのように変更すればよいか」
というのは、AIP全く関係ないのでスレ違い。
レジストリを操作するAPIは適当にググったりMSDN調べたりすればすぐわかる。
877 :
デフォルトの名無しさん :2006/01/29(日) 16:17:17
ビジネスソフト板のExcel総合相談所 40スレから誘導されてきました 環境:WinXP,Excel2002VBA POSTメソッドで検索した結果(書籍情報)を、Excelの表に書き下ろすマクロを作っています。 WebBrowser.Documentプロパティを使うと簡単なのですが、HTMLの表示が余計なので WebBrowserを介さずに、直接DOMオブジェクトを取得したいと考えています。 いろいろ調べたところ、 - MSXML.DOMDocumentで、POSTして読み込んだXMLのDOMを取得できる - MSXML.XMLHTTPで、POSTして読み込んだHTMLのソースを取得できる - MSHTMLで、URL指定して読み込んだHTMLのDOMを取得できる というところまで分かった(実行できた)のですが、 POSTして読み込んだHTMLをDOMにする方法が見つかりません ご教示くださいますよう、お願いいたします。
ExcelのマクロにAPIを直接使用できるの?
>>878 はい。おそらくものによるんだと思いますが、VBE(エディタ)の「参照設定」メニューで
Microsoft XML v3.0などを選択してearly bindingしたり
Set obj = CreateObject("MSXML2.XMLHTTP")のようにlate bindingしたりして
そのままobj.openとかobj.sendとか使うことができます。
WinHTTPでURLとPOSTDATAを指定して、ファイルに保存して、 そのファイルをURLと指定して、MSHTMLに食わせるとか?
884 :
865 :2006/01/29(日) 19:00:00
#define _WIN32_WINNT 0x0400 で直りました。 ありがとうございました。
>>884 GetOpenFileNameはそれで済むかもしれんが
defineすることによる他への影響は??
BackupReadの使い方を教えてください
887 :
デフォルトの名無しさん :2006/01/29(日) 21:34:13
現在WindowsXP、VisualC++で入力支援系のプログラムを書いています。 'a'〜'z','0'〜'9'をRegisterHotKey()で登録し、 WM_HOTKEYが来たら自分自身をSetWindowPos()、SetFocus()で アクティブにしたうえで、Hotkeyを解除、その先は通常に入力〜と言った感じで 任意のエディタやアプリケーションに対する入力に被せています。 しかし、これだと最初の1文字の入力がHotkeyとして食われてしまうため、 アクティブになった直後にkeybd_eventで同じ入力を送って補完するようにしています。 自分のマシンだとこれで上手くいくのですが、 他のマシンで試すと、なぜかkeybd_eventが無視されてしまい、最初の一文字が入力されません。 SendInput()も試してみましたが同様でした。 また、他の部分でkeybd_eventを実行してみたら正常に動作しています。 フォーカスを切り替えた直後のkeybd_eventに問題があるようです。 ただ、SetFocus()とkeybd_eventのSleep()を噛ましてみてもダメでした。 何かいい解決策はありますでしょうか。 対象のマシンも同様にWindowsXPでパフォーマンスは少し下くらい、 VC++は入っていませんが、.netのSDKやらplatformSDKやらが入っています。
>>888 キーボード設定のリピート入力時間設定が大きく違うとかいうオチ?
>>885 それが心配なら#define _WIN32_WINNT 0としてしまえばよい。
俺は大抵それに加え_WIN32_WIDOWSと_WIN32_IEも0にしている。
891 :
デフォルトの名無しさん :2006/01/29(日) 23:38:47
プリントスクリーンと同様のことが出来るAPIってあります? 自分のPCだとプリントスクリーン経由で画像のキャプチャーをすると失敗することがあって困ってます・・・
>>891 動画とかはわざとキャプチャ不能にしてることがあるよ。
GetDC() で対象ウィンドウ(NULLを指定すればデスクトップ全体)のDCを取得して
CreateCompatibleDC()してCreateCompatibleBitmap()
質問です。 同じプログラム内で2度以上PostQuitMessageが呼ばれるのは問題ないのでしょうか?? 用途は、2枚目のウインドウを破棄するときに、メインとは違うところで行われているディスパッチメッセージを抜けたいのです。 PeekMessageにウインドウハンドルをいれて監視してるのですが、WM_DESTRYやWM_QUITやWM_CLOSEが捕獲できませんでした。 PeekMessageのウインドウハンドルをNULLにした場合でも結局WM_DESTRYやWM_CLOSEは捕獲できませんでした。 こういう使い方って問題ないのでしょうか?
GetDC
>>893 PostQuitMessageを送るとメッセージループが終了するんで、それ以降メッセージ処理しようがない気が。。。。
896 :
デフォルトの名無しさん :2006/01/29(日) 23:49:38
>>889 設定調べてみましたが、両方とも全く同じデフォルト値のままでした
>895 >PostQuitMessageを送るとメッセージループが終了するんで 直ぐには終わらない。WM_QUITは優先順位がものすごく低いから、 キューに貯まったメッセージが全部消えて無くなるまではやってこない。
>>895 レス感謝!
メッセージ処理をしているところが2箇所あるんです。
えーっと、windowsにはscanf等の代わりとなるようなGUIの入力ダイアログがありません。
なので、自作しようと思って、表示とかは問題なくできたんですけど、(createwindowexでコントロールを貼り付けた。)
一つの関数に押し込めて便利に使いたいので、
その関数の中で専用のメッセージ処理を行いたいのです。
それで、その専用のメッセージ処理から抜ける際に何をフラグにして抜けるか非常に悩みまして、
一応、WM_QUITをフラグにしたんです。
で、WM_QUITを生成するためにはPostQuitMessageを呼ぶことになってしまって・・・。
こんな感じで大丈夫なのかと思って質問しました。
ぶっちゃければ、2枚目以降のウインドウを破棄したときに最後に呼ばれるメッセージがわかれば問題ないと思いますが、検討がつきません。
なんか妙案ありませんか??
900 :
899 :2006/01/30(月) 00:25:34
ああ、そうだ。 一応これでも今のところは意図の通り動いてはいます。 が、ちょっと挙動に不安がのこるので非常に気になっています。
>>899 そういうときは普通モーダルダイアログを使う。
>>901 あー、ダイアログか。
うーんあんまり使ったことないので候補から外れていました。
その手も模索してみようと思います。
レス感謝。
やっと寝れます。=D
>>892 >動画とかはわざとキャプチャ不能にしてることがあるよ。
それ、単にオーバーレイ表示なだけな気が‥‥それ
WM_DESTROYとWM_CLOSEとWM_QUITの違い分からないのですが 教えてください!あと、終了するときはDestroyWindow()とCloseWindow() とPostQuitMessage(0)とexit(0)のどれが本当は正しいんですか? (exit(0)が一番楽だけど・・・)
>>904 WM_DESTROY:ウインドウが消滅し始めるとき
WM_CLOSE:ユーザーがウインドウを閉じようとしたとき(Xを押したとき、とか)
WM_QUIT:アプリケーションが終了しようとするとき
ウインドウとアプリケーションとの区別が付けば分かるかな?
DestroyWindowとCloseWindow、PostQuitMessageとexitの関係も同じようなもん。
またウインドウのメッセージループを1つのスレッドと考えると、
それを終らせるメッセージをWindowsに投げるのがPostQuitMessage
普通に強制終了させるのがeixtかな?
1アプリで複数ウインドウのソフト作ったらわかるかも。
まぁMSDN嫁。
>>888 そんな変なことするより、RegisterHotKeyを使うのを
やめた方がいいかと。
>>904 WM_CLOSEはウィンドウの閉じるボタンが押された直後等に
送られてくるメッセージ。まだこの時点では閉じるのを拒否
することができる。(ファイルを保存するか聞くのはここ)
WM_DESTROYはウィンドウが破棄される直前に送られてくる。
もうこの時点では後戻りはできない。
後始末等が必要なときは、ここで処理するのが普通。
WM_QUITは最後、これでおしまいってときに送られてくる。
普通はWM_DESTROYもWM_QUITもアプリケーションから直接
送ったりはしない。DestroyWindow(), PostQuitMessage()を使う。
CloseWindow()というAPIはウィンドウを閉じるのではなく、
最小化するだけなので全然関係ない。
>>905 > PostQuitMessageとexitの関係も同じようなもん
全くの別物な訳だが。
PostQuitMessage : 指定されたスレッドが自らの終了を要求したことをシステムに伝えます。
exit : C標準関数で、プロセスを終了する。mainでのreturnはこの処理と等価。
APIなのかツールなのかわかりませんが パフォーマンステストで実行前に Winのディスクキャッシュをクリアしたいんですが どうすればいいんでしょうか? メモリ分のダミーファイルを読み込むだけでいいんでしょうか?
>>909 AUTOEXEC.BATのSMARTDRV.EXEをコメントアウト(;^ω^)
>>911 Win16ならともかくWin32でそれはないだろ。
>>905 C/C++のexitに対応するのはExitProcessだろ。
>913 c/c++のexitはCRTの終了処理が含まれるから厳密にはちがうよ
>>914 論点はそこじゃないと思うのだが……。
PostQuitMessage()とExitProcess()はまったく違うぞ。
じゃ、プラスモデあげる
他プロセスのデバイスコンテキスト(?)を得るにはどうすれば良いでしょうか? よろしくお願いします。
プロセスにデバイスコンテキストなど無い
GetDC
Get DC card
>>918 FindWindowEx関数で該当するウィンドウのハンドル(HWND)を受け取り
GetDC乃至BeginPaintでデバイスコンテキストを取得すればいいんじゃまいか?
923 :
918 :2006/01/31(火) 03:31:19
Spy++で表示されるウィンドウキャプションと GetWindowText関数で取得したウィンドウキャプションが一致しません。 Spy++はどのようにウィンドウキャプションを取得しているのでしょうか?
逆ですか? Spy++の動きがわかればそれを真似すればよいかなと... もっと簡単な方法があるのでしょうか? ちなみにGetWindowText関数で取得した値は、 SendCommand関数でWM_GETTEXTを送ったときと同じ値が返ってきます。
>>924 取り方が違うんじゃなくて、取ってる対象が違う希ガス
>>924 GetWindowTextは同一プロセス内のみ
>>926 > SendCommand
SendMessageだろ?
SendCommandって関数もあるみたいよ
ごめんなさい。SendMessageでした。
>>930 メッセージを送るのはSendMessageだろ?
自己解決しました
934 :
924 :2006/01/31(火) 13:17:36
すいません。 解決してません。
935 :
924 :2006/01/31(火) 14:14:10
936 :
928 :2006/01/31(火) 14:37:41
937 :
924 :2006/01/31(火) 14:53:30
日本語のMSDNしか目を通していませんでした。 読んでみます。ありがとうございました。
938 :
デフォルトの名無しさん :2006/01/31(火) 15:00:54
グローバルのキーイベントどうやって取得したらいんですか? よろしくお願いします。
>>937 日本語のほうにも書いてあるぞ。
MSDNにしては完璧に訳してある。
941 :
デフォルトの名無しさん :2006/01/31(火) 16:02:46
Sleepの動作を詳細に教えてください
指定された時間分(単位ミリ秒)Sleepします
>>941 MSDNライブラリじゃ足りない?
インシデント消費して、MSに聞いてみれ
944 :
924 :2006/01/31(火) 16:16:33
やっぱりわかりません。
同一プロセスでないとGetWindowTextはNULLを返すということではないのでしょうか?
今回の場合NULLではなくWM_GETTEXTと同じ値を返します。
Timerイベント内(
>>935 )でGetWindowTextを呼び出すのと、
EnumChildWindowsのコールバック関数内で呼び出すのに違いがあるのでしょうか?
もちろんウィンドウハンドルは同じ値です。
945 :
924 :2006/01/31(火) 16:46:11
プロセスIDを調べたら解決しました。 EnumChildWindowsを実行していうほうが同一プロセスで、 Timerイベントのほうが別プロセスでした。 そのため返す値が違ったようです。 スレ汚して本当にすみませんでした。
946 :
デフォルトの名無しさん :2006/02/01(水) 10:50:28
HEX文字を数値に変換するAPIを教えてください
sscanf
APIじゃなきゃ嫌
電卓を関数電卓にして外部操作しろ。
StrToIntEx
951 :
デフォルトの名無しさん :2006/02/01(水) 12:13:30
953 :
デフォルトの名無しさん :2006/02/01(水) 12:38:41
test
954 :
デフォルトの名無しさん :2006/02/01(水) 12:40:22
特定のドメインのアクセスを検知や抑制をしたいんですけど、 どんな方法がありますか?
ISAPIフィルター
956 :
デフォルトの名無しさん :2006/02/01(水) 16:29:34
WindowsのAPIでユーザがローカルLogonしたことを検知するAPIはあるのでしょうか?
APIはあるにはある。(WlxLoggedOutSAS) しかしAPI以外の方法をすすめる。
958 :
デフォルトの名無しさん :2006/02/01(水) 19:13:32
すいません、質問させていただきます。 ディスプレイの電源が入っているかどうかを調べるAPIってありませんかね? また、ディスプレイ関連で接続されているディスプレイの最大解像度を取得する関数なんか、無いですかね?
解像度はEnumDisplaySettingsで取得。
>>958 ディスプレイの電源状態が何に必要なのかが気になる。
>>960 単純に、ディスプレイの電源状態を確認して、ディスプレイの電源が付いたと同時になんらかのプログラムを起動させることを考えています。
例えば、動画とかが電源ONと同時に頭から見れたら便利ですよね?
961は天才
モニタの電源がついてから安定するまで10秒ぐらいかかるうちのモニタはどうすれば
Sleep(10000)する
>例えば、動画とかが電源ONと同時に頭から見れたら便利ですよね? 別に?
どうしても見つからないので教えて下さい。 印刷プレビュの実装に関して教えてもらえませんか。 MFCを使えばちょちょいの様ですが(MFCは使って無いので???ですが)、SDKに実装する方法を知りませんか。 正直、自分でガリガリ構築するのは…無理かと思ってます。 そこで、市販でも構わないのでクラスライブラリやDLLを探しているのですが… 一般的にはどの様にしているのでしょうか? # やはりMFC? # SDKベースでMFCの印刷プレビューを実装する方法でも構いません。 どなたか宜しくお願い致します。m(__)m
>>967 ちゃんと追加されてる。
コンボボックスの高さが足りないため表示されないだけ。
>>966 印刷も結局のところDCを使った描画です
>>966 SDKで印刷プレビュー実装しているの探し見たけど、やっぱり
>>969 の言う通り、DC使った描画だったよ。印刷の仕方からして
当然といえば当然だけど。
MFCは実装するというより、AppWizard使って作れば最初からつけられる。
「Doc-Viewをサポート」にチェックするだけ。
971 :
デフォルトの名無しさん :2006/02/01(水) 22:22:54
956です。ありがとうございます。
>>957 >しかしAPI以外の方法をすすめる。
これは何かAPIで問題があるからAPI以外と言うことをお勧めしてくれてるのでしょうか?
それともDebugが難しいから?
>>968 リソースのコンボボックスの高さを弄ったら見事にできました。
ありがとうございました!
>>966 自分は「猫でも分かる...」を参考に作った。
win98 と winXP でドライバのセットが違うのが面倒だった。
ページが複数になるとき、狙ったページを見るとか、印刷するとかが面倒。
MS Word のようなヘッダ、フッタ、ページ番号などを付けようとすると
更に面倒。
bmp の方があっさりしている。
>>971 調べないで答えるがターミナルサービスAPIでできそうな希ガス
975 :
デフォルトの名無しさん :2006/02/02(木) 06:14:54
パーティションを切っている場合、同一ハードドライブでも複数のドライブレターが付きますが、 2つのドライブレターが、同一のHDDに属しているかどうかを見分ける方法を教えてください。
>>975 見分ける必要がどこにあるのかを教えて下さい。
>>976 Fire File Copyのようなファイルコピー援用ソフトだと必須だな。
やり方は知らんが。
>>975 読み出し方は忘れたが、HDD にはメーカ名や Ser No. やオレはこういうものだ、
こう読み取ってくれえというのが付いているから読み取って比べれば。
デバイス・マネジャなんぞで出てくるヤツ。
>>976 何のためにこのスレに居座っているのか教えてください。
>>979 なぜ教えなければならないのか教えてください。
踊るなよ
982 :
デフォルトの名無しさん :2006/02/02(木) 17:04:11
>>981 なぜ踊ってはいけないのか教えてください。
画面に表示されている文字列を取得するAPIってあります? タイトルバーやダイアログメッセージの取得方法は分かりますが、 画面上に配置されているリストボックスやラベルの文字列も取得をしたいのです……
>>983 それは別プロセスのウインドウ?
昔からあるコントロールは、大抵取得するメッセージがあるはず。
最近のコモンコントロールは、別プロセスから取得できないから、
どうしてもやりたければ、DLL注入してごにょごにょってことになるのかな。
そこまでしてやりたいのかどうかは知らないけど。
次スレまだぁ?
989 :
847 :2006/02/02(木) 22:09:44
>>853 勉強になった。サンクス。そのことに関して調べてみよう。
>>971 MyGina.dllを作成するのははだめという訳じゃない。
ミスって回復コンソールからレジストリを復旧するとか
OS再インストのおまけが付きとか、
Myサービス作ってLogonを通知するのがメンドイとか
ドキュメントが少ないとか。
たとえばLogon後に適当なEXEを走らせて検知する方が簡単かと思う。
>>975 CreateFile()→DeviceIoControl()使って
"\\\\.\\C:"でIOCTL_DISK_GET_DRIVE_LAYOUT
したものと
"\\\\.\\D:"でIOCTL_DISK_GET_DRIVE_LAYOUT
したもののシグニチャが一致したらそうなる
ようだ。ただしコードは未確認。
991 :
デフォルトの名無しさん :2006/02/02(木) 22:46:21
こっちに書くかDDKスレに書くか悩んだのですが…… 特定のポートに刺さっているUSB機器(自作)のファームアップデート時に、 物理的にコネクタ抜き差ししているのですが、この抜き差しの作業ををAPIで擬似的に 再現することは可能でしょうか? デバイスマネージャからの接続ポートの無効化→有効化で出来るか、と考えた のですが、それを実現できる関数の名前が分からずにいます。 上記手段を使う場合にググるべき関数の名前か、その他一般的手段のヒントを 教えてもらえませんでしょうか?
>>991 USB機器側が自作なら、機器側で抜き差しをエミュレート(D+=D-=Low)
するのが簡単確実。
SetupDiRemoveDeviceとか。
995 :
991 :2006/02/02(木) 23:40:35
うお、短時間にいろいろとありがとうございます。 >992殿の手段と >994殿のAPI、チェックしてみようと思います。 >993殿 ファームアップデートした段階で応答なくなっちゃうんです(死 で、再起動するには抜き差し……と。
ret = CreateNewThread("Win32API質問箱 Build40");
乙
Z
1000ならぬるぽ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。