.NET Framework!? 知らんな!!
そんなヤル気のあるネィティブプログラマ集まれ!
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
やさしい お兄ちゃん 達が答えてくれるかも。
でも、質問する前に検索ぐらい汁!!
過去スレ・参考は
>>2 ぐらい...
乙
甲
MSDN Online巡回して根こそぎローカルにダウンロードする方法教えて。
貧乏人は大変だな(w
7 :
デフォルトの名無しさん :03/06/20 00:08
うpロダ巡回して根こそぎローカルにダウンロードする方法教えて。
がばっりまーーーーす
10 :
デフォルトの名無しさん :03/06/21 12:09
もまいら暑いですが元気ですか!! おせてくさい。m(__)m VBとかDelphiのコンボボックスをSpy++で見ると 独自のウィンドウクラスを使用していますが、 コンボのドロップダウンの部分とかはOS実装だと 思うので"ComboBox"を使用しないと実現できないと 僕は思うのですが(また独自実装だとOSがEditとか ComboBoxとかのコモンクラスを提供する意味がない) これってどうやっているのでしょう??
>>10 実は俺も知りたい。
コンボボックスのドロップダウンや、ポップアップメニューは、
ポップアップウィンドウなのに、表示されてもオーナーウィンドウのキャプションバーが青いままなんだよなぁ。
自前のウィンドウクラスでやろうとしてもなかなかうまく行かない。
クリックしてもアクティブにならないようにするだけじゃないの?
13 :
デフォルトの名無しさん :03/06/21 13:49
他のウィンドウの遠隔操作をするのに クラス名を指定してマウスの左クリックを送信したいのですが WIN32APIはに関しては初心者のためあまりわかりません。 今までは、SetForegroundWindowを送った後にTABキーとエンターキーだけで左クリックの 代わりをしていたのですがそれでは動作が不安定がちになり困っています。 だれか教えていただけないでしょうか? 使用している言語はHSPです
>>13 WIN32APIでボタン押すなら
PostMessage(hwnd,WM_LBUTTONDOWN,0,0)
これでだめならHSPスレで
>10 独自のウィンドウクラスって言ったってクラス名だけだろ。 ドロップダウン部のクラス名は変わってなさそうだからサブクラスされていると思われ。
mciSendString 使って、あるスレッドでオープンした曲を 他のスレッドで操作することはできないのかな? ちょっとやってみたかんじ、うまくいかないんだけど。
17 :
デフォルトの名無しさん :03/06/21 17:21
>>14 ありがとうございます。
今から試してみたいと思います
以下のコードを音声を再生しながら、 ループさせると音声にノイズが入ります。 原因がまったくわからず、困ってます。 みなさんの、お力を貸してください。 OS:Windows2000pro SOUND:Creative Sound Blaster Live! GRAPHIC:Matrox Parhelia 128MB
つづき -- source -- BITMAPINFO bi; HBITMAP bitmap, save; HDC dc,memdc; LPBYTE bits; int width=640,height=480; bits = malloc(width*height*4); bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bi.bmiHeader.biWidth = width; bi.bmiHeader.biHeight = height; bi.bmiHeader.biPlanes = 1; bi.bmiHeader.biBitCount = 32; bi.bmiHeader.biCompression = BI_RGB; bi.bmiHeader.biSizeImage = width*height*4; bi.bmiHeader.biXPelsPerMeter = 0; bi.bmiHeader.biYPelsPerMeter = 0; bi.bmiHeader.biClrUsed = 0; bi.bmiHeader.biClrImportant = 0; bi.bmiColors->rgbBlue = 0; bi.bmiColors->rgbGreen = 0; bi.bmiColors->rgbRed = 0; bi.bmiColors->rgbReserved = 0;
BITMAPINFO bi; HBITMAP bitmap, save; HDC dc,memdc; LPBYTE bits; int width=640,height=480; bits = malloc(width*height*4); bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bi.bmiHeader.biWidth = width; bi.bmiHeader.biHeight = height; bi.bmiHeader.biPlanes = 1; bi.bmiHeader.biBitCount = 32; bi.bmiHeader.biCompression = BI_RGB; bi.bmiHeader.biSizeImage = width*height*4; bi.bmiHeader.biXPelsPerMeter = 0; bi.bmiHeader.biYPelsPerMeter = 0; bi.bmiHeader.biClrUsed = 0; bi.bmiHeader.biClrImportant = 0; bi.bmiColors->rgbBlue = 0; bi.bmiColors->rgbGreen = 0; bi.bmiColors->rgbRed = 0; bi.bmiColors->rgbReserved = 0;
dc = GetDC(NULL);
memdc = CreateCompatibleDC(dc);
bitmap = CreateCompatibleBitmap(memdc,width,height);
save = SelectObject(memdc,bitmap);
BitBlt(memdc,0,0,width,height,dc,0,0,SRCCOPY);
SelectObject(memdc,save);
DeleteDC(memdc);
GetDIBits(dc,bitmap,0,height,bits,&bi,DIB_RGB_COLORS);
ReleaseDC(NULL,dc);
DeleteObject( bitmap );
free(bits);
>>19 は、間違いました。無視してください。
>>18-21 そのコードがなければ正しく再生されるんだな?
って事はそのコードの負荷が多すぎるってことじゃね?
ループ内の
bits = malloc(width*height*4);
memdc = CreateCompatibleDC(dc);
bitmap = CreateCompatibleBitmap(memdc,width,height);
は外に持ってった方がいいんじゃ無いか?
省電モードでディスプレイの電源がオフになっているかをしらべるには どのAPIをつかえば良いのですか?
>>22 ありがとうございます。
そうです。このコード以外は問題はありません。
普通に何もないWinMainに、このコードを書いても
ノイズがのるので。ノイズは主に
>BitBlt(memdc,0,0,width,height,dc,0,0,SRCCOPY);
と
>GetDIBits(dc,bitmap,0,height,bits,&bi,DIB_RGB_COLORS);
でノイズが発生しているっぽいです。
(ここをコメントアウトするとノイズは無くなる)
ノイズは「ブッ」って感じの音でループすると「ブッツブッツ・・・」
という感じになります。
他の環境で、この問題が起こらなければ「自分の環境の問題」と
して、この問題は無かった事にしようと思うのですが・・・。
「自分の環境の問題」でも、もしかしたら「他でも起こる問題」かもしれないので、やっぱり対処しておいた方がいい。 問題が起きたときに、「お前のところ出てるのに(ry」とかいわれると困る。
BitBltで発生してるのに対処のしようがあるの?
質問です。フルパス名と相対パス名で処理を分岐させたいのですが 以下のような判別方法で良いでしょうか? (判別方法) ・先頭文字が'\'か'/'ならフルパス名。文字列が':'を含むならフルパス名。 (例) C:\A\B\C\SAMPLE.TXT / \A\B\C\SAMPLE.TXT →フルパス名 B\C\SAMPLE.TXT / SAMPLE.TXT → 相対パス名 もしかして簡単に調べるAPIがあるのでしょうか…? よろしくお願いします。
2文字目が「:」
>>28 ご教示ありがとうございます。
なるほど…、ドライブ名は1文字固定でした。
・先頭文字が'\'か'/'。2文字目が':'ならフルパス名。
これでいいのかな…。
ネトワークのパスは? \\client\SharedDoc
>>30 あ…、ネットワークドライブのことを考えていませんでした。
なかなか一筋縄ではいきませんね。
>>31 URL先読ませていただきました。これは本当に複雑ですね…(絶句)…。
判定するAPIがあるんですね。よかった…。(汗)
このAPIに従いたいと思います。
皆様にご教示いただいて、助かりました。
ありがとうございます。
33 :
デフォルトの名無しさん :03/06/22 16:59
HSPを使っているのですがGetForegroundWindowで ハンドルを取得してそのハンドルから子ハンドルを 取得取得しようとしているのですがうまくいきません 一応ネットなどで探してみたのですがHSPでの子ハンドル の取得方法が書いてあるページが無くて困っています だれかこんな私に力を貸していただけないでしょうか? ↓ソースです
#include "llmod.as" sdim buf,1000; タイトルバーの文字列を入れる変数 sdim name,100 alloc hwnd_buf,256 screen 0,240,100:gsel 0,2 font "MS ゴシック",12,16 repeat:wait 1 dllproc "GetForegroundWindow",prm,1,D_USER;最前面ウィンドウのハンドル取得 hwnd=dllret;変数dllretにハンドルが返る getptr ptrm,buf dim prm,3 prm.0=hwnd prm.1=ptrm prm.2=1000 dllproc "GetWindowTextA",prm,3,D_USER;ウィンドウのタイトル取得 hwnd_buf=buf getptr cls_name,name prm.0=hwnd prm.1=cls_name prm.2=100 dllproc "GetClassNameA",prm,3,D_USER
prm.0=hwnd prm.1=GW_CHILD dllproc "GetWindow",prm,2,D_USER child_hwnd=dllret getptr perm,buf dim prm,3 prm.0=child_hwnd prm.1=perm prm.2=1000 dllproc "GetWindowTextA",prm,3,D_USER;ウィンドウのタイトル取得 child_buf=buf redraw 0 color 255,255,255 boxf:pos 0,0 color 0,0,0 mes hwnd_buf mes " HWND:"+hwnd+" mes " Class:"+name mes "" mes " CHILD_HWND:"+child_hwnd mes " CHILD_buf:"+child_buf redraw 1 loop stop
このスレでHSP絡みってあんまり見ないな…
まぁ、HSPでAPIをいじってる人ってごく一部だと思うから…
>>24 waveOut系の処理がウィンドウ任せなら優先順位高めのスレッドに擦り付けてみれ。
HSP読めん
>>33 その取得したフォアグラウンドウィンドウが子ウィンドウを持っていない罠とか
ダウンロードするとき時計みたいのがでるんですけど・・・ なんででしょう?
>>42 私のことでしょうか?
もしそうでしたら直接リンクをクリックするとYahoo側で拒否されるので
アドレスをブラウザにコピペしてダウンロードしてみてください。
>>33 #define GW_CHILD 5
が必要。
sample.exeってファイル名を見るとウイルスを連想してしまうな(w
>>33 ところで MSDNには
|すべての子ウィンドウを取得する場合、EnumChildWindows 関数を使った方が
|GetWindow 関数をループ処理で呼び出すよりも信頼性の高い結果が得られます。
|GetWindow 関数を呼び出してウィンドウを列挙すると、無限ループに陥ったり、
|すでに破棄されているウィンドウのハンドルを参照する危険性がでてきます。
ってあるけど、いいのかな?
HSPでコールバック関数って使えるの?
配列変数にマシンコードを書いて、配列のアドレスを 関数ポインタとして渡すという暴挙を使います。
ちょい質問。 1.マルチCPUにおいて、CPU負荷を分散させるには、 A.別スレッドにする B.別プロセスにする 2.デュアルCPUにおいて、軽い処理二つと重い処理二つの計4つをほぼ同時に開始した時、 片方のCPUに重い処理二つが集中するのを防ぐ方法は? APIとはちと違う質問だと思うが、知ってる奴いたら教えてくれ。
CPUの割り当てを制御するAPIがあったような えーとSetThreadAffinityMask
51 :
デフォルトの名無しさん :03/06/23 06:25
>>49 >1
別プロセスなら確実かと。スレッドの場合は
共有メモリの関係でキャッシュに気をつけないと
CPUに無駄に負荷がかかりそう。
>2
処理をある程度小さく分割してスレッド数を監視しながら
並列に処理するように工夫するくらいしか思いつかないですが・・。
その手の方面ではインテルが並列処理のためのCコンパイラを
開発していたような。
>>33 46が言うようにGetWindowはあんまり当てにならないから
EnumChildWindowsかFindWindowExで。
あとAPI使うようになったらCやC++に変えたほうがいいよ。
お節介スマソ
53 :
デフォルトの名無しさん :03/06/23 16:50
駄質問スマソ、 char *buffer; と宣言したポインタに長い文字列を入れました。 このbufferの10文字目から20文字目までを別の変数に入れたい場合、 どのようにすればよいのでしょうか?
スレてきにはCopyMemoryだな
57 :
デフォルトの名無しさん :03/06/23 16:59
ありがとう!逝っちゃってきます!
lstrcpyn ここいらのAPIをいまだに使ってるヤシっているのかな?
Cのライブラリじゃなく、Win APIの文字列操作関数を使っている ヤシはいるか、という話なんだが、わかりにくかったか?
ちっちゃいプログラムを作るために使うかもしれん。
「いまだに」の意味が。別に流行で使い分けるものでもなかろうに。
フックdll使うときは可能な限りMFCもRTも使わないようにしてるな。
>>44 >>46 アドバイスありがとうございました。
GW_CHILD 5を定義したらうまく取得できました。
>>52 API初心者なもので、EnumChildWindows関数はちょっと私にはちょっと難しそうです
HSPばかり使っていると将来役に立ちそうではないので、将来的にはC,C++に変えたいと思っています
みなさん本当にありがとうございました。
>>64 将来仕事に使うならともかく、趣味の範囲ならHSPで十分だと思うが…
まぁ、人それぞれだし(HSPが理解不能で逃げてきただめ人間な折れ)
タイマの使い方がわかんねぇ!誰か教えてくれ! 使ってるのは VC++6.0だ。 俺の作ったプログラムに、こんな記述をしてみたんだ。 void CALLBACK Hoge( UINT timerID, UINT uMsg, DWORD_PTR dwUser, DWORD dwParam1, DWORD dwParam2 ) { MessageBox( 0, "(゚д゚)ウマー", "ウマー", MB_OK ); } で、画面に張ったあるボタンのイベントリスナ(←?)にこんな記述を含めた。 timeSetEvent( 5 * 60 * 1000, 100, Hoge, 0, TIME_ONESHOT ); これをWinXPで試したところ、もうばっちり。 そのボタンを押してきっかり5分後にウマーダイアログが表示された。 が!そのバイナリをWin98(たぶんSE以前)にもってって動かしたら、 なんとボタンを押してから37秒後にウマーダイアログが表示されやがるんだ! なんでだ! 「コンテクストによって、タイマ値をミリ秒単位で与えたり、0.12ミリ秒単位で与えたり」すんのか? とも思ったが、VC++の、[F1]で開くドキュメント(MSDN?)で見ても 「timeSetEventの第一引数は、ミリ秒だよ」としか書いてねぇ! どうすんだ!おい!timerSetEvent!!!
TLS を自前で実装しようとしとるんだども、カレントスレッドの識別子を高速に取得する方法がわかんねべ。 技術的にはスタックさの一番奥にでも入れておけばいんはずだがら きっと簡単に取れるはずだべ? いい方法はないっぺか?
精度とかいうレベルじゃないような・・
# Win32 的には,fs レジスタがスレッド固有領域のセレクタです。 あぎゃ、これか?これでええのんか? で、これをお行儀よく取得するにはどうしたらいいんじゃ?
>>66 5*60*10000%65536 = 37856
というわけで、きっと16ビットに切り捨てられてるよ。
> 66 5 * 60 * 1000 = 300000 = 0x493E0 ( 0x493E0 & 0xffff ) = 0x93E0 = 37856 ≒ 37 sec UINT が 16 bits 扱い?
71-72 そうだったのかあああ! ありがとう! 二人の永遠の幸せをお祈りします♪
つかなんで16bitなんだろ・・・すげー気になる
よー分からんがtimerSetEventは使うのやめといた方がいい。
じつはWin3.1愛用者だたりとかw
>>75 しかし、SetTimerはウィンドウハンドルが必要だし、
WaitForSingleObjectとかで待つのは、
本質的に「イベントの擦違い」の危険を孕んでしまうし、
Sleepだと途中でとめるの難しいし....
つーか、
なんでたかだかタイマごときでこんなに苦労するんだ!
>>77 > しかし、SetTimerはウィンドウハンドルが必要だし、
別にウィンドウハンドルは必須じゃないよ
>>78 まじですか?
なんか漏れ、そのへん誤解してるな。
もいっかいドキュメントよんでみます。サンキュ
>>74 Win9xのマルチメディアサブシステムは16ビット側に
実装があるからだと思われ
>>78 ウィンドウハンドルはいらないけど
DispatchMessageは必要という罠が
81 :
デフォルトの名無しさん :03/06/24 21:13
>>80 >>DispatchMessageは必要という罠が
SetTimer()の4つ目の引数を指定するだけじゃだめなの?
82 :
デフォルトの名無しさん :03/06/24 22:06
マルチメディアタイマを複数起動させた場合、 タイマのスケジューリングはどうなってんのか 教えてください。 例 タイマ1:1ms タイマ2:10ms タイマ3:100ms(ところどころでスリープする) OS=Win2K
83 :
デフォルトの名無しさん :03/06/24 22:19
WinMain関数の場合、 return msg.wParam; の代わりに return TRUE; でもいいんですか?
>>83 たぶんだめぽ(´・ω・`)
手持ちの本っていうか「プログラミングWindows」によると
PostQuitMessage(0)でWM_QUITを発生させてなんやらかんやらで
return msg.wParamは終了時に0を返してアプリを終了させる
でも、TRUEは0以外って規定してあるから…
そんな感じ
>>86 > return msg.wParamは終了時に0を返してアプリを終了させる
そこはPostQuitMessageに渡した値が入ってるんでは?
んで、結局終了コードを返すわけだから適当な値なら何でもいいってことかな。
正常終了なら0を返しなさいってことだろう。
だから、正常終了の意味でTRUEはダメだが。
>>88 たしかに渡した数がreturnされるけど0以外みたことないっすよ
>>87 この本たかいよ(つд`)
ちなみに、書いてたのはP96だから参考までに
>>89 確かに高いよなー
漏れ上官しか持ってないし
やっぱり高いのか 書店で見かけてスルー下記憶があるからなー(つд`)
昔は終了コードでバッチ内分岐とかやったけど、今はどうでもいいのかもね。
TRACE して分かりました。 一晩寝て頭がリフレッシュされました。 失礼しました。
>>13 でWIN32APIで左クリックの送信方法を質問したものですが
ひとつ問題が発生してしまいました。
クリックイベントは送信されているのですが
送信した後に別なウィンドウを開いてしまうと(ファイルを開くなど)
スクリプトが途中で止まってしまい、なかなか次の作業をしてくれません
何が悪いのでしょうか?(ちゃんとWM_LBUTTONDOWNも送信しています。)
95 :
デフォルトの名無しさん :03/06/25 20:01
ネットワークの検索ダイアログを表示したいのですが
次のコードで表示されません。
HMODULE lib;
lib = LoadLibrary("shell32.dll");
typedef BOOL (WINAPI SHFINDCOMPUTER)(LPCITEMIDLIST, LPCITEMIDLIST);
SHFINDCOMPUTER *SHFindComputer;
SHFindComputer = (SHFINDCOMPUTER*)GetProcAddress(lib, (LPCSTR)91);
SHFindComputer(0, 0);
ttp://soramimi-i.com/my2/vb/02/020113.htm にあるVBコードだと表示されるのですが。
環境は
Windows2000/IE6/VC6
です。
よろしくおねがいします。
switch(msg){ case WM_TIMER: if(上矢印が押されている)処理1; break; (省略) } WM_TIMERメッセージが呼び出された時に特定のキーが押されているか どうかを判定するにはどうすればいいか教えて下さい
>>96 たぶん、
case ボタン押した:
if(右おした)
key=KEYNO_MIGI:
break;
case WM_TIMER:
if(key==KEYNO_MIGI) 処理1;
break;
という感じでは?
最近winプログラムやってないのでうろ覚えだが
最近といっても2年ぐらいだが
>>94 もう少し簡単に説明しますと
ファイルをを開くボタンをWM_LBUTTONDOWNで送信
↓
ファイルを開くウィンドウが開く
↓
WM_LBUTTONDUPでボタンを戻す
↓
しかし、そのままの状態で次の処理に進まない
という現象がおきてしまいます。これはHSPが悪いんでしょうか?
それとも命令の仕方が何か足りないのでしょうか?
>>96 GetKeyState関数の引数に↑の仮想キーコード"VK_UP"を
セットして戻り値を調べる。MSDNでこのあたりのAPIを調べれば
他にもいろいろと調べる方法はあるはず。
ひょっとしてネタなのか?
100 :
デフォルトの名無しさん :03/06/25 21:28
100get's
>>99 なんでもネタというのはだめだよ
ネタか?
>99 上手くいかないです 以下のようにしたのですが、一度押したキーを離しても if(r!=0)*x=*x+2;が実行されてしまいます void p_mov(int *x,int *y){ short r; r=GetKeyState(VK_RIGHT); if(r!=0)*x=*x+2; } (略) case WM_TIMER: p_mov(&x,&y); InvalidateRect(hw,NULL,TRUE); break; (略)
>97 それだといちど右矢印キーを押したら WM_TIMERメッセージが来るたびに処理1をする形になると思うのですが 私がやりたいのは、WM_TIMERメッセージが来た時に キーが押されていれば処理1をしてキーが押されていなければ 処理1をしないようにしたいのです。 分かりにくくて申し訳ありません。
if (r < 0) だろ
そんなときはDirectXだ!!
>>102 r!=0って・・・。
戻り値くらいちゃんと調べろよ。
>>102 GetKeyState()はメッセージキューにKeyDownがたまってしまうからね(多分)
if(::GetAsyncKeyState(VK_SHIFT) & 0x8000 )
//キーが押されている
else
//キーが押されていない
で。
あ VK_SHIFT じゃなかった。
>104,>106 上手くいきました、ありがとうございます 教科書をみたら(r<0)の形で書いてあったのですが 「最上位ビットが1なら指定されたキーが押されている、0なら押されていない」 という説明が教科書に書いてあったので、 0じゃなければ押されている状態だと思って>102のように書いたのです。 なんかすごい勘違いしてたみたいです。
しかも × GetKeyState()はメッセージキューにKeyDownがたまってしまう ○ GetKeyState()はメッセージキューにたまったKeyDownを見る 酔ってる漏れ。
111 :
デフォルトの名無しさん :03/06/26 00:16
下のような感じでフォルダを選択するダイアログを SHBrowseForFolder()で出したいのですが、 C言語で書いていると、 pMalloc->Release(); がコンパイルエラーで通ってくれません。 C++を使わずにCで代用するための方法がありましたらご教授いただけないでしょうか? LPMALLOC pMalloc = NULL; SHGetMalloc(&pMalloc); pidlSelected = SHBrowseForFolder(&bi); pMalloc->Free(pidlRoot); pMalloc->Release();
112 :
デフォルトの名無しさん :03/06/26 00:21
pMalloc->lpVtbl->Release(pMalloc);
>>98 dialog ""
mes "この文字がいつ表示されたかを考えましょう"
stop
↑を実行すればわかるかと…
>>115 こんな感じになりました。
ファイルをを開くボタンをWM_LBUTTONDOWNで送信
↓ →「処理OK」
ファイルを開くウィンドウが開く
↓ →「処理OK」
WM_LBUTTONDUPでボタンを戻す
↓ →音沙汰なし。
↓ (だけど、クリックして開いたウィンドウを閉じると処理が再開する)
こんな感じです。
120 :
デフォルトの名無しさん :03/06/27 00:34
ちと板違いかもですが、VC.NET買って現在勉強中なんですが で、自分なりに勉強の仕方考えてるんですが、 WINAPI>STL>MFC って感じに勉強していったらいいんですかね?? 今は「猫でも分かる」でWINAPIで勉強中です
現在の CPU の位相と角速度を求める API はありますか?
>>122 そのAPIを実行した途端、「現在」ではなくなりますが。
>>119 115の言いたい事分かってる?
あと
WM_LBUTTONUP
はこの場合特に必要ない
将来というかプログラマになるのなら、 開発環境がなんであっても対処できるようにならなければ駄目
すみません、ジョイパッドってどうやって処理すればいいのでしょうか? WM_KEYDOWNでやってみたら上手くいなかったです
WM_KEYDOWNはキーボードのメッセージです ジョイパッドでうまくいかなかったのは当然です 心配する必要はありません
joyGetDevCaps、joyGetPosで出来まふよ
有難うございます
132 :
デフォルトの名無しさん :03/06/27 17:11
自前でBMP画像を印刷する関数を作りました。 普通にプリンタのDC取得して、SetPixel()で左上からピクセルを コピーしていくような単純なルーチンです。 Win付属のペイントと比べ、印刷時の時間が格段に遅くイライラしてしまいます。 ビットマップ印刷用のAPIなどが用意されているのでしょうか? ちなみに環境はWindows2000/VC6/VC7です。
DIBを使ってください
134 :
デフォルトの名無しさん :03/06/27 17:27
DIB?ツカットコトナイヨー!! それで早くなるならやってみます!!
135 :
デフォルトの名無しさん :03/06/27 17:30
>133 もうちょい情報ください。なかなか検索ひっかからんです。API名とか
無茶苦茶引っかかるんだが、どうやって検索しているんだ? まずは検索方法を晒せ
137 :
デフォルトの名無しさん :03/06/27 17:44
よくわかんないんだけど、BYTE型とかのRGBの配列をDIBって言うの?? 今も内部データはそんな感じなんだけど、そのまんま使えるのかな?
138 :
デフォルトの名無しさん :03/06/27 17:48
>>136 DIBは引っ掛かるけどどのAPI使えばいいか分からん、ということでは
プリンタでDIBは使っちゃだめー DDBを使いなさい
140 :
デフォルトの名無しさん :03/06/27 17:56
パレットの問題ってこと?
141 :
デフォルトの名無しさん :03/06/27 19:15
>>132 ・プリンタのDCを取得
・そのDCを元にDDBを作成(CreateCompatibleBitmap等)
・作成したDDBにピクセルを設定(GetDIBits等)
・プリンタのDCにDDBを描画(Bitblt等)
これでも、不満か?
143 :
デフォルトの名無しさん :03/06/27 20:38
>>132 BMPからDIBを作成
プリンタのDCにDIBをStretchDIBitsで描画
というやり方でできる気がする。
プリンタは解像度に注意。
DIBは、BITMAPFILEHEADERからピクセルまで、自分で読み込んで
作るのが確実かな(それほど難しくはない)。拡大モードの設定
をしてもStretchDIBitsできれいに拡大できない場合は、自分で
適当な拡大処理をすべし。
144 :
デフォルトの名無しさん :03/06/28 00:07
ダットファイルの2行目をCharNextExA を使用して 取り出す方法教えてください。 ただし、2行目半角ずれてます。 データは char bufbuf[1024]に読み込んであります。 32APIアプリ文字列関数なくて困ってます。 ■黄色.dat 佐藤 めぐみ 小池 eof w2000,BCC5.5
>>144 > 32APIアプリ文字列関数なくて困ってます。
lstrlen, lstrcmp とかあるけど。
というか、普通に strchr とか使うのはダメなのか?
146 :
デフォルトの名無しさん :03/06/28 00:57
予めダットファイル中身は見れませんが 10字100行程度です。 ヒントがつかめたら、CSVやTAB成型列に 朝鮮したいです。 長さと比較でどうやって2列目切り出すのですか?
148 :
デフォルトの名無しさん :03/06/28 01:14
もしかして、俺が無知なのかも BCC5.5でWINアプリ(コンソールでない) 作る場合 #include <string.h> がOK牧場ですか。
可能
150 :
デフォルトの名無しさん :03/06/28 01:46
>149 感謝感謝 がんばってDAT読み取り、3つのリストBOXの アイテムに入れてみます。 テンプレ提供歓迎です。 リストBOX1、中井、香取、稲垣 リストBOX2、佐藤、めぐみ、小池 リストBOX3、嘉門、はにわ、てつとも
(3)タモリの話し方が気に食わない、などが浮上している。 w
158 :
デフォルトの名無しさん :03/06/28 11:15
プラットフォームSDKのドキュメントが、構造体の部分が全て未訳で英語なのですが どこかに日本語訳されてるドキュメントがないでしょうか? 教えてください。
160 :
デフォルトの名無しさん :03/06/28 11:53
やはりそうなんですか・・・。JAVAなんかではある程度しっかりと訳してくれてるのに〜 本当に、マイクロソフトって殿様商売ですね〜 ドキュメントも手抜きかつ超冗長な階層ディレクトリですし・・・。訳し方も明らかにプログラミングを した事がない人が、ただ訳してるという文章も一部ありますし・・・ ボーランドやサンを見習ってほしいです。
161 :
デフォルトの名無しさん :03/06/28 11:55
スレ違いで恐縮ですが… VNCの使い方についてたてられてるスレがあったら どなたかおしえていただけないでしょうか?
釣られてみよう
>>160 あの程度の英語も読めないの?
コンピュータ使うの辞めた方がいいよ。
釣られてみよう
>>164 英語が分からなければコンピュータを使うべきではないのですか?
別に英語が読めなくても問題はない それよりも翻訳ソフトなり翻訳サイトなりを利用するという、その程度の頭も働かないところが問題
>>165 >英語が分からなければコンピュータを使うべきではないのですか?
程度によるな。プログラミングするなら、ifとかwhileとかbreakといった英単語の意味くらいはわかってないとつらいだろうし。日本語版のソフトを使うだけなら、別に英語は不要だけどね。
あのな〜。一応僕は英検2級なんだよ。 でもプログラミングはずぶの初心者だから、SDKの文に何か専門用語だとかその分野特有の 言い回しとかがあると、変な誤訳する可能性があるからそれが怖くて言ってるの。 失礼だが、自称中級者ほど英文の怖さを分かってないもんだ。その語句の 代表的な意味だけを汲んで「分かった感じ」になる事の危険性ぐらい頭に置いてくれ。
( ´,_ゝ`)プッ
英検2級であの程度の文が読めないっての…? それは変だろ 中卒か高校一、二年程度の英語だぞ
今の所は読めるよ。でもこれからもっといろいろ読む様になった時の 誤訳の可能性が怖いんだよ。
言い訳ばっかりだな 翻訳された物が正しい保証など無い
専門用語は数当たるしかないだろうなあ
日本語に訳す必要がない。英語そのまま理解すれば良し。
素人(自分)よりは信用できるよ。 じゃあドキュメントには、プログラミング分野での特有の意味や言い回しってのは少ないのか。
用語はあるが、文学小説のような無駄に比喩的な言い回しは無い 用語は訳されていてもカタカナになっているだけ
誤訳されてて原文の意味がまったくわからなくなってる時が一番困る。 MS のドキュメントは Basic english だかなんだかっていうルールに従って書かれてるから 馬鹿でも読めるという罠。
意味が正反対になるような表現って無いと思うんだけど。
一般的な英語と違うってのがわかっていながら英検二級を自慢か? そんなんだから煽られるんだっちゅーの おまえらも久しぶりに叩きがいのある奴紛れ込んできたからって騒ぎすぎ。
180 :
デフォルトの名無しさん :03/06/28 14:53
それにしても、
>>160 は見事な釣りだな・・・。
>>179 までで10数匹釣り上げた。
もっとも、バカ丸出しの雑魚ばかりだけど。
180=160
>>181 ,182
おいおい、俺は160じゃないぞ。
さらに2匹追加かよ・・・・。
┐(´ー`)┌ どっちでもいいよアフォ
まあ、
あのな〜。一応僕は英検2級なんだよ。
また英語談義か
189 :
160(英検二級) :03/06/28 16:22
そんなにうらやましいのか・・・
190 :
デフォルトの名無しさん :03/06/28 17:39
すみません、この一文っておかしいでしょうか? 猫のC言語のところではこの書き方で書いてあったのですが bccでコンパイルしようとしたらエラーがでてきて 'void *'型は'HPEN__*'型に変換できないってなるんです HPEN oldpen,hpen; (省略) oldpen=SelectObject(hdc, hpen);
>>190 あなたがC言語を使っていない可能性があります
192 :
デフォルトの名無しさん :03/06/28 17:41
oldpen=(HPEN__ *)SelectObject(hdc, hpen); こうするとエラーが出なくなるかもしれないわよ
何も基本型の方でキャストしなくても・・・
194 :
デフォルトの名無しさん :03/06/28 17:49
コンパイル通りました、有難うございます
195 :
デフォルトの名無しさん :03/06/28 17:59
俺、一応工業英検2級だけど、MSDNのドキュメントくらい辞書見ながら読んだら理解できると思うぞ。
辞書なんかいらないだろ
思い立って辞書を引くとプログラミング用語と英語では意味が違って混乱することもたまに
用語は日本語訳されてもカタカナに変換されるだけなので、 結局その用語を知らなければ意味は通りません
199 :
名無し@沢村 :03/06/28 18:07
おまいらはコンピュータ用語辞典のサイトも知らないのか。 あー、嘆かわしい・・・・
200 :
デフォルトの名無しさん :03/06/28 18:08
プログラム言語が読めれば、何してるかはわかるんだから英語だろうが中国語だろうが 特に問題にはならないと思うけど。
要は、コードを見た時に「マシンの気持ち」になって、マシンに共感しながらその処理内容を実感できれば最強のプログラマになれる、ってことなんだよね。
エロいな
つまり女を扱いたかったら、女の気持ちになって、一度男に犯られてみろと?
| |/ノ二__‐──ァ ヽニニ二二二ヾ } ,'⌒ヽ /⌒!| =彳o。ト ̄ヽ '´ !o_シ`ヾ | i/ ヽ
207 :
デフォルトの名無しさん :03/06/29 09:20
盛りあがっている? ところすいませんどうしても解決できないことがあります。 コントロールパネルの「マウス」の「速度」の設定値を取得する方法あるのでしょうか? 欲を言えば変更もできるといのですが。 あの速度の設定で加速される量というのは何処かに定義されているのでそうか? ご存知の方、教えていただけないでしょうか?
208 :
デフォルトの名無しさん :03/06/29 09:28
>>207 レジストリ内をくまなく探せ
REGMONを併用すると楽に見つかる
209 :
95371 :03/06/29 09:57
210 :
デフォルトの名無しさん :03/06/29 10:00
64ビット用のWindowsならWIN64APIになるの?
対応コンパイラを使えば
212 :
デフォルトの名無しさん :03/06/29 11:03
非公開APIでも使っているんじゃないの?
214 :
デフォルトの名無しさん :03/06/29 12:09
>>208 アリガト、必要な情報を得ることができたよ。
マウスの情報 取得 とかで検索掛けてもまったく見つからなかったけど、
マウスの高速化で検索するといっぱいありました。
調べた情報も還元しておきます。
HKEY_CURRENT_USER→Control Panel→Mouse
MouseSpeed 加速スピードを設定。1で2倍速、2で4倍速、それ以外の数値は加速無しになる。
MouseThreshold1 加速度有効までの距離。2倍速になるまでのドット数を入力。MouseSpeed1か2を設定していないと無効になる。
MouseThreshold2 加速度有効までの距離。4倍速になるまでのドット数を入力。MouseSpeed1か2を設定していないと無効になる。
この部分はスレ違いですが...
DirectIMPUTでデバイスから直接データ取得しても、この部分は加味されていないので
自前で計算が必要なんですね。
某ROでウインドモードでマウスが遅くなるというのは、(この件を検索する段階で多く見かけたので)
この辺を計算していないからな。(現在の対応は知りませんが、このゲーム名前しか知らないので)
215 :
デフォルトの名無しさん :03/06/29 13:16
>>214 これは
SystemParametersInfo
SPI_GETMOUSE, SPI_GETMOUSESPEED
で取得できる情報とは違うの?
216 :
デフォルトの名無しさん :03/06/29 14:53
>>215 そのようですね。
取りあえず、数値の意味が調べられてので
前の件で調べたことは無駄にはなりませんでしたが。
レジストリ取得のデバック開始したとこでした。こちらのほうが楽ですね。
>>215 ,208さん
どうもありがとう
217 :
デフォルトの名無しさん :03/06/29 19:15
SDKドキュメントを読み始めたのですが、何だか項目を選択するとそのまた下に項目が 出て、それを選択するとそのまた下に項目が出てって感じて延々と続くんですけど、 しかも複数の項目が出るならまだ分かるんですが一つだけの項目の下にまた一つだけって 感じで、何だか箱を空けたらその中にまた箱が入ってたっていう笑い話みたいなんですけど、 もしかしてこれって不良品なんですか?全然説明文にたどり着けません。 誰か教えてください。
とりあえず必要は情報はキーワード検索にかけてみる あと、MSDN再インスコ
必要は情報->必要な情報
釣られ損ねた。 MSDNに限って言えば日本語訳はかなり怪しいので原文を見たほうが良いと思う。 日本語訳の方は内容古いし、よく情報が欠けてる。
221 :
デフォルトの名無しさん :03/06/29 19:58
SystemParametersInfo 追加情報 これは標準マウスのデータしか返さないようです。 トラックパッド トラックポイントはまた別のようです 鬱だ
222 :
デフォルトの名無しさん :03/06/29 20:58
ダイアログの表示完了を知りたいのですが、どんな方法がありますか? ダイアログにWMメッセージを送信したいのですが、ダイアログの表示命令を出した直後に、 PostMessageするためダイアログが開ききっておらず無効になっているようなのです。 Sleep関数以外でよい方法があったら教えてください。おねがいします。
223 :
デフォルトの名無しさん :03/06/29 21:13
>>222 文意が今ひとつはっきりしないがWM_INITDIALOGじゃだめなのか?
>>222 ダイアログ プロシージャのcase WM_INITDIALOGで
SendMessage(GetParent(hDlg), WM_COMMAND, 0, (LPARAM)hDlg);
とかは?
226 :
デフォルトの名無しさん :03/06/30 04:27
shellapi.hの最新版はどこでダウンロードできるのですか? 教えてください
228 :
デフォルトの名無しさん :03/06/30 11:14
教えてください。 ウィンドを持たないプログラム(xxx.exe)を 強制終了させたいです。 xxx.exe のプロセスIDに TerminateProcess をすれば良い というところまでは解ったのですが、 プロセスIDを取得する方法がわかりません。 お願いします
プロセスを列挙するだけ
230 :
デフォルトの名無しさん :03/06/30 15:47
win9xの"C:\Program Files"内で GetCurrentDirectory、もしくはGetModuleFileName を利用した所、\Program Filesの部分が化けました。 ただし、Api使用はDelphi6経由です。 例 p:pchar; GetModuleFileName(0,255,p); writeln(string(p)); 半角スペース部分を何とかすればよいと思うのですが…
うっ、自己解決しました。 メモリ割り当てを new(p) なんぞしておった。 p:=allocmem(255); だな。 スレ違いスマン。
232 :
デフォルトの名無しさん :03/06/30 15:55
いきなりスレ違いですいません。ただ今祭り開催中です。
先日、6月27日、埼玉県の大宮で「年上好き男年下好き女神」というオフが開催されました。
このオフは、幹事も参加者もオフ初心者ばかりでした。このオフは一度開催され、
今回は新規メンバーを入れての二回目でした。
これは、オフを勘違いしてるねらーがいて、それが当たり前だと思っている人達を紹介します。
【登場人物紹介】
モチッコ:このオフの幹事、セクハラばっか、幹事特権行使する
ヘルシア:自称オフ板常連者、個人プレーが得意、目立ちたがりや
inagawadonn:不細工セクハラ王、酔ったふりで女を口説く、脱いで受け狙い
太平洋:メガネヒッキー、会話ができないキモヲタ、ナルシスト、スカシ
せん:いい年して落ち着きの無い典型的ダメ人間、ノリでセクハラ、馬鹿
ゆうや:浪人生、テニスラケット持ってくる不思議君を演じる奴、未成年
キュービック:女にやたら年を聞き、年齢の話題が大好き、悪ノリ
この男達が参加メンバーです。その日、オフ参加初めての気の弱そうな男性が来ました。
その方はちょっと変わった服装で上着に帯のような物が着いていました。参加者は
それを見て、柔道着だと馬鹿にし、彼が席を立つ度に大爆笑しました。
しまいには本人の前で柔道の話をして女性から笑いをとりました。
自分達こそそんなおしゃれでもないのに彼を馬鹿にし、ある者はこっそり写メールまで
撮りました。みんな初対面なのに、いじめで仲良くなるオフ会、私も、輪からはみ出るのが
怖くて一緒に馬鹿にしてしまった加害者です。彼は勿論気づいていてとても悲しそうな顔で帰りました
後日、オフレポを読もうと思いレスを見ると、みな、柔道の話題が含んでありました。いい大人が
人を馬鹿にしてまだ楽しんでいます。「これから柔道着オフにする?」とちっとも反省していません。
それはおかしいと第三者の意見を言ってあげてください。また7月11日に開催されます。
※もし、ご協力いただけるならば、この文をコピペして他のスレに書き込んでください。できるだけ多くの方に
考えていただいたいので、面倒ではありますがよろしくお願いします。
http://ex3.2ch.net/test/read.cgi/offreg/1055133705/l50
233 :
デフォルトの名無しさん :03/07/01 20:35
スクリーンセーバーのON/OFFをするAPIとかないですかね? 漏れの中には50秒ごとにMouseMoveとかKeyDownとかの メッセージ投げるぐらいのことしか 見つからなかった&浮かばなかったもので・・・。
>>233 自アプリがアクティブな時だけの話なら、WM_SYSCOMMAND/SC_SCREENSAVEを
握りつぶす。
んじゃなきゃ、今の通りにやるしか無いだろね。
235 :
デフォルトの名無しさん :03/07/01 20:47
ネットで稼ぐならこれ。完全無料!!
リンクスタッフに登録すれば小遣い稼ぎができます!!
[報酬について]
クリック報酬・・・1クリックされる度に10円の報酬
バナー紹介料・・・リンクスタッフ登録の度に500円の報酬
プレミアム・・・優秀サイトには、報酬に応じてボーナス有り
別に自分のホームページがなくてもできます。(URLを書く欄は適当でいいです)
単純に考えて1日100人クリックしたとすると、100人×10円×30日=30000円(一ヶ月)
そこらへんの掲示板に貼り付けていけば100クリックなんてスグです。
その他、自分の貼り付けた広告から誰かがスタッフになると500円もらえるので
1日5人スタッフを紹介したとして500×5×30=75000円
30000+75000=105000!!しかも間接報酬などもありますので一ヶ月に10万円以上稼げます!!
http://www.hptouroku.com/cgi-bin/affiliates/clickthru.cgi?id=252 超おすすめです!!ぜひ一度のぞいて見てはいかがでしょうか?
236 :
デフォルトの名無しさん :03/07/01 21:10
>>233 SetThreadExecutionState じゃだめか?
スリープ状態に入るのを阻止する API だけど、
ES_DISPLAY_REQUIRED フラグはまだ試したこと無いんだよな。
237 :
デフォルトの名無しさん :03/07/01 21:11
238 :
デフォルトの名無しさん :03/07/01 21:16
#define STRICT ってどういうときに使うんですか?
>>233 SystemParametersInfoのSPI_SETSCREENSAVEACTIVEは?
Tipsサイトとかによく出てると思うんだが……なんか漏れ勘違いしてる???
>>240 型チェックが厳密になる。
実際にはHANDLEだったのがHWNDとかHDCとかに再定義されたりするわけだが。
MSDNで「STRICT を使った型チェックの改善」見とくといいよ。
あと、VC6あたりからはデフォルトでプロジェクトにSTRICT定義が入ってるはず。
>>239 「システムの設定を変えるためのプログラム」を作っているんでなければ、
勝手にシステム設定をいじるのは邪道だと思うのは漏れだけかなあ?
システムの設定をいじる必要など無い 存在するスクリーンセーバーのプログラムを手当たり次第に消すようにすればいい これ王道
MessageBox を使って、スクリーンセーバーの設定を切ってくださいとユーザーに頼む
PeekMessageでCPUを使い切るとか それなら50秒ごとにメッセージ投げたほうがまだマシだな
>>242 むぅ、確かにその通りだ。軽率なレススマソ。
するとやはり50秒ごとにメッセージ投げるしかないのかなぁ。
ざっとぐぐった感じだと、みんなそういう対処だね。
なんか気に入らないけど、一時的に無効にするような手段が用意されてないなら
それしかないのかな。
>>247 スクリーンセーバーをソフト側で抑止する方法ならあるですよ。
WM_SYSCOMMANDで、wParamがSC_SCREENSAVEの時に
0以外を返すとスクリーンセーバーが起動しなくなります。
SC_MONITORPOWERならモニタオフもしなくなるよ。
Windowsが問い合わせてきてダメならダメと言えば良いらしい。
ゲームとかで割と便利だったり。
レスくれたしとたち> ありがとござました。 SystemParametersInfoで逝きます。 てか、それで逝ってって言われた。 てか、その前に、スクリーンセーバがかかると 落ちるシステムを何とかしる!・・・いや、もう言うまい
ちなみに、メッセージ投げるんでなくて、SetCursorPosするだけで スクリーンセーバは防げるという話は聞いたことあるぞ。
勝手にカーソル位置変えられるより 見た目無害なメッセージのほうがよさげ
254 :
名無し@沢村 :03/07/02 12:16
>>253 ヌヒよ、現在のカーソル位置を取得して、その値でSetCursorPos()すればいいんじゃないのか?
ヌヒよ、現在のカーソル位置を取得して、その値でSetCursorPos()すればいいんじゃないのか?
ヌヒよ、現在のカーソル位置を取得して、その値でSetCursorPos()すればいいんじゃないのか?
いや、カーソル位置は変えないのよ。 GetCursorPosで取ってきた座標にSetCursorPosするだけ。 たしか、同じようにスクリーンセーバで悩んでたやつが 最終的にそういう手法を見つけたんだと思う。
スクリーンセーバ解除用に昔つくった関数(w //移動量が小さかったり、SetCursorPosを単発で呼んだだけだとスクリーン //セーバは一度解除されるものの、0.5秒後ぐらいに復帰してしまう POINT cur; GetCursorPos(&cur); for(UINT i=1; i<=5; ++i) { if(!::SetCursorPos(cur.x+i, cur.y+i) ) //画面の端で移動に失敗 ::SetCursorPos(cur.x-i, cur.y-i); ::Sleep(5); } Sleep(20); SetCursorPos(cur.x, cur.y);
257 :
デフォルトの名無しさん :03/07/02 21:18
最初ウィンドウサイズを100*100にしておいて、 スペースボタンを押すと100*200になって、 更にスペースを押すと100*100に戻る。 (以降スペースを押すたびに100*100と100*200が入れ替わる) というウィンドウを作るにはどうすればいいか教えて下さい。
>>256 画面の右上か左下にいたら失敗しそうに見えるが…
>257 どうすればいいって、そのまんまじゃん。 判らない事は1つずつ尋ねるべし!
260 :
デフォルトの名無しさん :03/07/02 21:42
>>259 最初ウィンドウサイズを100*100にしておいて、
261 :
デフォルトの名無しさん :03/07/02 21:51
スタティックテキストのフォントサイズをかえるにはどうすればいいんですか?
レス有難うございます CreateWindow関数のパラメータで最初のウィンドウを100*100にする方法は分かります スペースキーを押す事でWM_KEYDOWNメッセージがアプリケーションに送られて、 (wparam==VK_SPACE)が真か偽かを判定することによって、 押されたキーがスペースである事を判別する方法は知っています ただ、スペースキーが押された時にどういった関数を呼び出す事によって、 ウィンドウサイズを変更できるかが良く分からないのです
263 :
デフォルトの名無しさん :03/07/02 22:26
>262 どうすればいいって、そのまんまじゃん。 判らない事は1つずつ尋ねるべし!
>>262 あなたの言う「ウインドウサイズ」とは
もしかして「クライアント領域のサイズ」のことか
>264 そうです
266 :
デフォルトの名無しさん :03/07/02 22:52
エディットボックスにタブを入れようとすると次のコントロールが アクティブになっちまう。なんかいい方法ないでつか? あとタブをコピーしてペーストしたらタブが八文字ぶんになっちまう。 これもなんかいい解決法キボン
Windowsではウィンドウサイズとクライアントサイズは別物だぞ
AdjustWindowRect
んでMoveWindow
271 :
デフォルトの名無しさん :03/07/03 02:25
ツールバーやステータスバーなどの上下に張り付くウィンドウを差し引いた クライアント領域を自動で取得する関数ってつくれまつか? ステータスバー等の有無も自動で認識してくれるといいんですが。 おながいします。
273 :
デフォルトの名無しさん :03/07/03 07:21
よくインストーラでタスクバーを消して画面いっぱいに描画している のを見ますが、あれは 1、タスクバーを消しているのではなくウインドウを最前面に表示して いるだけのでしょうか?だとしたら、タスクバーの部分まで隠して画面サイズに合わせて 最大化するAPIなんかあるのでしょうか? 教えてください。
yes > 273
275 :
デフォルトの名無しさん :03/07/03 11:31
<274 ありがとうございます!! あなたはこのような経験をされたことございますか? もしよろしかったら手順を教えてください。
>275 hWnd = CreateWindow(szAppName, szTitle, WS_OVERLAPPED , 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), ......
>>276 CreateWindowEx(WS_EX_TOPMOST, ...)
でないとタスクバーは隠せないと思うが。
278 :
名無し@沢村 :03/07/03 13:19
>>267 > エディットボックスにタブを入れようとすると次のコントロールが
> アクティブになっちまう。なんかいい方法ないでつか?
WM_GETDLGCODEのハンドラが返す値をいろいろいじってみる。
> あとタブをコピーしてペーストしたらタブが八文字ぶんになっちまう。
> これもなんかいい解決法キボン
WM_SETTEXTのハンドラで好きなようにする。
279 :
デフォルトの名無しさん :03/07/03 20:32
<<276 <<277 すばらしいですね!やっぱりデベロッパーはすごいですね。 関心してしまいます。
>277 そうすか。環境や状況依存かも。一応、自分とこは隠れるのでウソつきじゃないって事で...
281 :
デフォルトの名無しさん :03/07/03 21:36
>>276 私はVBでプログラムしておりますが、フォームを新規に作成してコードで
ボタンなど追加しなくてもいいようにVS.NETで作成したフォームでウインドウ
の最大化だけをAPIに任せるような使い方はできないのでしょうか?
>>272 GetSystemMetricsなんてのもあるな
エディットコントロールに文字を約60KB以上表示しようとしたら 表示されなくなってしまいました。 EM_SETLIMITTEXTあたりかなと思いましたが、ダメなようです。 何か良い方法はないでしょうか?
いつまでも9X使ってないで、NT technologyにしなさい。
286 :
デフォルトの名無しさん :03/07/03 22:38
おっ、なんか来た。  ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ,/ヽ ,/ ヽ ∧_∧ ,/ ヽ ( ´∀`),/ ヽ ( つつ@ ヽ __ | | | ヽ |――| (__)_) ヽ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ヽ ⌒\/⌒\/⌒\|彡~゚ ゜~ ~。゜ ~ ~ ~ ~~ ~ ~~ ~ ~~ ⌒\/⌒\/⌒\彡 〜 〜〜 〜〜 〜〜 〜 〜 | |<<286
API を使ってフラッシュムービー(swf ファイル)を再生するような方法を 知ってる方いませんか? もしくはそれに似た方法でも・・・なにかありませんか?
>>288 ShellExcuteを使ってIEを.swfファイルを引数にして呼べば
うまくいくかもしれない。試してないけど。
>>289 ヒント感謝します。
さっそくShellExcute を検索してみます。
どっかにATL使ってCOM経由でFlash再生するってネタならあったが。
開けました。大感謝です。 ついでに呼び出したウィンドウと同一ウィンドウ内で開く方法とかも・・・ ・・・自分で探してみます。
294 :
デフォルトの名無しさん :03/07/04 08:48
おしえてください アイコンの指定はウィンドウクラスでhIconメンバーですが ファイルに付くアイコンの指定方法がわかりません、 ビルドによってアイコンを変えたいのですが・・
296 :
デフォルトの名無しさん :03/07/04 09:02
297 :
デフォルトの名無しさん :03/07/04 11:11
リストビューの項目で全ての文字列を表示できない場合はツールチップ表示にはどうすればいいんですか?
>>294 スレ違いだと思うが…
リソースの中で番号がいちばん若いアイコン
299 :
デフォルトの名無しさん :03/07/04 11:47
LVM_SETTOOLTIPS wParam = 0; lParam = (LPARAM)(HWND)hwndToolTip;
>>299 これだけでいいんですか…
ありがとうございます。
>>298 すみません。スレ違いですか APIで命令があると思って・・・
起動する前の状態のファイルからどうやってAPIを使うの? ファイルがあるだけで発動するウイルスでも作るの?
303 :
デフォルトの名無しさん :03/07/04 15:34
>>282 できるのですか!!!
教えてください。
でもWIN32APIを使ったことがありませんのでこの機能で感動したいと思います。
よろしくお願いします。
304 :
デフォルトの名無しさん :03/07/04 15:54
物理HDD(\\.\PHYSICALDRIVE)と、ドライブレター(C: D:等)との対応付けを知るためのAPIや 方法はありますでしょうか? DeviceIoControl(IOCTL_DISK_GET_DRIVE_LAYOUT) で、物理HDD内のパーティション情報 は取れたんですが、各パーティションのドライブレターまでは載っていないみたいでした。 それとも、レジストリのどこかに書かれているのかな?
>>266 ふつうウィンドウサイズといったらタイトルバーや枠を含めた大きさのことでしょ
区別するためにわざわざ「クライアント領域」という言葉があるんだし
307 :
デフォルトの名無しさん :03/07/04 20:56
OutputDebugStringからのメッセージを受け取るデバッガを作っているのだが どうにも全てのプロセスからのメッセージを受け取れるようにできない. WaitForDebugEventだと一つしか受け取れないようだし... 何かよい方法は無いでしょうか?
308 :
デフォルトの名無しさん :03/07/04 21:01
CPUの周波数によって表示を変えたり メモリーの容量で表示を変えたり HDDの容量で表示変えたり OSによって表示変えたり実行できるOS制限したり できませんか?
できる
310 :
デフォルトの名無しさん :03/07/04 21:07
どうやって?
マルチには教えられません
ここ一本で おしえてくれ
>>308 漠然としすぎだよ。
それらのデータを得る方法がわからないの?
それらのデータによって処理を振り分ける方法がわからないの?
表示を変えるって何をどう変えるの?
314 :
デフォルトの名無しさん :03/07/04 21:55
>>313 全部が解らぬ
変えるのはメッセージとか
(´-`).。oO(何で検索しないのこの人…)
316 :
デフォルトの名無しさん :03/07/04 22:02
すぐみつかったが何か?
>>316 どんなキーワードで検索したか言ってみな
319 :
デフォルトの名無しさん :03/07/04 22:11
全部かよ…… 普通に簡単なアプリケーションは作れるの? まずはそこからのような気がしてきだぞ。 とりあえず周波数とかの代わりに現在時刻なり乱数なりで作ってみろよ。 それから周波数の取得方法探して差し替えればよかろう。
321 :
デフォルトの名無しさん :03/07/04 22:27
>>320 >普通に簡単なアプリケーションは作れるの?
>まずはそこからのような気がしてきだぞ。
時刻取得とか関数とかあるからわかるけど
周波数とかその他に取得の関数。・・・・有ると思うが解らない・・・
CPU 周波数 取得 tips 検索の方法も知らないんですね
323 :
デフォルトの名無しさん :03/07/04 22:42
どんな言葉で検索したのか俺も知りたい
325 :
デフォルトの名無しさん :03/07/04 22:55
326 :
デフォルトの名無しさん :03/07/04 22:57
>>326 じゃぁ言ってみな 検索もせずにマルチしたんだろ?
328 :
デフォルトの名無しさん :03/07/04 23:04
( ゚д゚)ポカーン
330 :
デフォルトの名無しさん :03/07/04 23:06
>>327 セントリーノ (・∀・)イイ! キター
真面に相手しちゃった
>>322 が馬鹿だったと言う事で。
あれ、322俺だ…ヽ(`Д´)ノ ウワァァァン
>>331 本当に馬鹿ですね(笑)
というと怒るんですよね。
333get
「プログラミングWindows 第5版(上) Charls Petzold著」のp.652,653に、 「WindowsNTでデフォルトプリンタのデバイスコンテキストを取得する方法」として、 下のようなコードがあります。 PRINTER_INFO_4 *pinfo4; EnumPrinters(PRINTER_ENUM_LOCAL,NULL,4,(PBYTE)pinfo4,dwNeeded,&dwNeeded,&dwReturned); hdc = CreateDC(NULL,pinfo4->pPrinterName,NULL,NULL); (省略あり) この場合、デフォルトプリンタの設定を変えた直後など、 うまくデフォルトプリンタが拾えないないことがあるんですが、 このコードは間違いですか? 「EnumPrinter()で取得した配列の先頭はデフォルトプリンタである」 という仕様は特にないですよね?
335 :
デフォルトの名無しさん :03/07/05 12:51
ふと気になったんですが、一番文字数の長いAPIはなんですか?
…ExExExExExExExExExExExExExExExExExExExExExExExExExExExExExExExExExEx()
CoMarshalInterThreadInterfaceInStream
>>335 自分で調べてみようよ。
俺も以前Javaで一番名前の長い例外クラスってなんだろうと思って調べたことある。
ただJavaの場合rt.jarの中身を見ればいいけど、Win32APIだと大変そうだなw
339 :
デフォルトの名無しさん :03/07/05 15:05
FindClosePrinterChangeNotification
うーん、負けた
>>337
SetupRemoveInstallSectionFromDiskSpaceList
なげーよ
鼻毛ーよ
エディットボックスに入力されたテキストの文字数を返す API ってありますか? GetDlgItemText で strlen だと効率が悪いです。
それがコンマ1ミリの時間にもならないとしても効率が悪いのか?
たぶん 100000 回くらい使うんだろう。
GetWindowTextLengthでいいんじゃ?
>>344 何文字入力されるか分からないんでとりあえず 10 MB 確保したあと
realloc してたんですよ。まあメモリの掃除になって良かったのかも
しれないけど
>>345 INT_MAX 回繰り返す可能性もあるので、、、
>>346 グッジョブ!!
マジサンクスっす。。。
早速使わせて頂きます
348 :
名無し@沢村 :03/07/05 19:59
>>347 > グッジョブ!!
おまいはなんか勘違いしてないか
恐ろしく厨房な予感。放置に限る。
>350 おう,激しくビンゴのようだ...サンクス
アプリの起動と終了の監視をする、
グローバルフックのプログラムを作ってみたんですが、重くて話になりません(T_T
インストールするフックの種類はWH_CALLWNDPROCです。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_163.htm この辺見ながらやってるんですけど、メッセージ全部受け取っちゃうのが
遅くなる原因みたいです。(タスクマネージャ開いてスクロールバーぐりぐりすると
CPU使用率がはねあがるので)
どうにか早くする方法はないものでしょうか…
355 :
デフォルトの名無しさん :03/07/07 00:55
あるディレクトリー下の階層を含めたファイル群を自動的に 圧縮・任意のディレクトリーに展開するライブラリでオススメって ありますか? 参考ソースの場所などがあれば教えていただければ助かります。 よろしくお願いします
356 :
デフォルトの名無しさん :03/07/07 01:27
MessageBox関数は、windows.hに定義されているのでしょうか?
(;´Д`)Kanbe Site YO!!
>>357 tyotto gurai iide syo!!
>>354 フックDLLからインポートするDLLは最小限にする
関係ないメッセージのときは可及的速やかに抜け出すよう
フックコールバックを見直す
362 :
デフォルトの名無しさん :03/07/07 18:17
CreateStreamOnHGlobalの第二引数がTRUEで実行して、 失敗した場合には、 第一引数のメモリオブジェクトのハンドルは自動的に開放されますか?
なぜ BOOL GetMessage() APIは、負数、0、正数の3種類の値をとるのでしょう? つーか、なんで BOOL にしてあるんでしょうか?
>363 昔からBOOLだった。
>>354 どういうことをしたいのか分からないですが、
終了を検知したいプロセスのハンドルを取得して
適当な待機関数で待つのが妥当じゃないでしょうか?
プロセスの起動も自前でするならCreateProcessした後に
WaitForInputIdle(GUIのみ)あたりで入力待ちになるまでなるまで
待ってもいいかもしれない。
とりあえずプロセスのハンドルさえ取得すればいろいろできる。
そうそう、プロセスのハンドルの取得方法くらいは他人に頼らず
自力で調べましょう。
>>354 漏れが思うに、勘違いしてるだけなんじゃねーのかなぁ。
「そのプログラムを動かした状態でぐりぐりやると重いが、
そのプログラムを動かしていない状態でぐりぐりやると軽い」
ならばそのプログラム自体に問題があるという事。
そう言うチェックはしてみた?
367 :
名無し@沢村 :03/07/07 22:19
皆々様方〜、教えてくださらんか、皆々様方〜♪ タイトルバーが赤や黄色のwindowをつくるにはどうしたら、いいかな〜? 教えてくださらんか、皆々様方〜♪
普通赤だろ?
369 :
デフォルトの名無しさん :03/07/07 23:16
先輩方。 Win32に疎いもので申し訳ないですが プログラムAで表示したメッセージボックスのイベントを プログラムBで拾って、メッセージ内容を取得することって可能でしょうか。 できそうだとは思うのですが、具体的な方法がわかりません。。 ご存知の方がいらっしゃいましたら、ご教授願います。 一応ネットも調べたのですが,,
メッセージボックスのイベント..って、なに? 意味がわかんないよ。 そもそも「メッセージボックス」っていっても、色々な種類があるんだが...。 適当なカタカナ言葉で誤魔化さずに、 もっと具体的かつ正確に条件を定義してください。
372 :
名無し@沢村 :03/07/07 23:29
先輩方〜、教えてくださらんか、先輩方〜♪ Win32に疎いもので申し訳ないのだけどよ。 プログラムAで表示したメッセージボックスのイベントを プログラムBで拾って、メッセージ内容を取得することって可能なのかよ? できそうだとは思のだが、具体的な方法がわからないよ。 ご存知の方がいたら、ご教授願うよ。 一応ネットも調べたよ。 教えてくださらんか、先輩方〜♪
373 :
デフォルトの名無しさん :03/07/07 23:43
>>370 ,371
先輩方〜、教えてくださらんか、先輩方〜♪
Win32に疎いもので申し訳ないのだけどよ。
プログラムAのウィンドウ上で情報を入力後、
確認MsgBoxを表示したタイミングでイベントを拾って
別プログラムBでMsgBoxのメッセージ内容(String文字列)を取得することって
可能なのかよ?
できそうだとは思のだが、具体的な方法がわからないよ。
ご存知の方がいたら、ご教授願うよ。
一応ネットも調べたよ。
教えてくださらんか、先輩方〜♪
>Win32に疎いもので申し訳 んじゃ、Win32以外の方法で書いて見せれ!
375 :
デフォルトの名無しさん :03/07/07 23:59
376 :
デフォルトの名無しさん :03/07/08 00:00
>>374 え。。ここ、他の道きわめてないと質問しちゃいけないんすか?
あるいは別の情報を提示しないといけないとか、トレード必要すか?
なら出直します。
>376 そうじゃなくて、他人が読んで理解できるように具体的に書く必要があるかと。 解ってもいない用語を無理に使っているから文章が破綻しているんだよ。 素直に何をしたいのかをまず書きなさいって。
プログラムAと同じフォルダにダミーのuser32.dllをおいて横取り。
380 :
デフォルトの名無しさん :03/07/08 13:25
自分で書かなきゃいけないフォント列挙のコールバック関数の作り方を教えて下さい フォントの列挙をしたいのですが、EnumFontFamiliesEx()で呼び出される コールバック関数は自分で作れとあるのですがどうすればいいのかさっぱり判りませぬ。 ・1回EnumFontFamiliesEx()を呼ぶ度にコールバック関数も呼び出される。 ・コールバック関数は列挙を続ける時は0以外、終わる時は0を返す。 上記の理屈は判るんですが… int CALLBACK EnumFontTest00(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, int FontType, LPARAM lParam ) { //試しにリストボックスにフォント名を追加 SendMessage((HWND)lParam,LB_ADDSTRING,0,(long)lpelfe->elfFullName); return 0; } #↑実装方法がわからんので今は常に0を返してます。 渡される値はENUMLOGFONTEXとかNEWTEXTMETRICEXのポインタですが、この情報から どうやって”列挙すべき内容が残っているのか”の判断をすればいいのやら… ちなみに上記のコードでフォント名を取得しようとすると常に"System"のみが 返ってきて列挙になりません。 厨な質問すまんですが教えて下され。
>>380 > ・コールバック関数は列挙を続ける時は0以外、終わる時は0を返す。
> 上記の理屈は判るんですが…
> ちなみに上記のコードでフォント名を取得しようとすると常に"System"のみが
> 返ってきて列挙になりません。
分かってないじゃんかよヽ(`Д´)ノ
0返したら列挙終了なんだろ? 1個で終わって当前だろう。
>>381 いや、コールバック関数内で”1を返すときの条件”をどう判断してよいのやら
判らんのれす…
>>382 全部列挙したければ1、何らかの理由で列挙をやめたいなら0
×”1を返すときの条件” ○”0以外を返す時の条件” スマンコ
385 :
デフォルトの名無しさん :03/07/08 14:31
>>383 ?
マジで理解できん…
”コールバック関数が返す値”をどうやって決めるかってな質問なんだけど的外れなんか?
>>386 コールバック関数は自作だろう?
10個で止めたいならカウンタでも作って10回呼ばれたら0を返すようにif文入れる。
そういうこった。
>>386 n個フォントがインストールされてれば
n回コールバック関数が呼ばれるはずですが?
で、ENUMLOGFONTEXを調べて、条件(例えば等幅フォントとか日本語フォントとか)
に合うフォントを適当なコントロールに追加する処理をすればいいかと。
>>387 質問の仕方が悪いんだろうな…
列挙する物がある間は0以外を返して、無くなったら0を返したい。
しかし、「まだ列挙する物が存在するという判断」をどうやって実現するのかが
判らんのよ…
>10個で止めたいならカウンタでも作って10回呼ばれたら0を返すようにif文入れる。
>そういうこった。
これは違うだろうと…
なくなったら勝手に終わるって
lParamに構造体かなにかのポインタでも入れてヒントに使えや
>>388 >n個フォントがインストールされてれば
>n回コールバック関数が呼ばれるはずですが?
ズガーン!!
EnumFontFamiliesEx()一回につき1度しか呼ばれないものだと勘違いしてました。
#EnumDisplaySettings()みたいに何度も自分で呼び出すものとばかり…
コールバック関数で常に0以外を返すようにしたら列挙できました。
アフォな質問に的確な回答マリガトウ御座いました。
>>392 コールバックとはそういうもんですよ
出前のときの確認電話とかあるでしょ。
こっちから電話するんじゃなくて
必要な分だけ向こうから電話をかけてくるんです。
無言電話で困ってます
>>394 全部DefWindowProcにお任せしよう!
緊急の時だけWM_RESCUEとかw
だ、だれか
>>353 に答えてやっては下さらぬか。。。
397 :
名無し@沢村 :03/07/08 20:22
皆々様方〜、教えてくださらんか、皆々様方〜♪ タイトルバーが赤や黄色のwindowをつくるにはどうしたら、いいかな〜? 教えてくださらんか、皆々様方〜♪
画面のプロパティーのデザインのところで赤や黄色を指定する 直接レジストリをいじっても良いけど
>>380 ず〜っと前、漏れもEnum系APIでの自前コールバックを引数にして・・・
ってやつで何がどうなってるのかよく分からなくて苦労したことあるなぁ〜。
そういう時はとりあえず、自分で呼ぶ側と呼ばれる側を作って
練習してみるのがいいかも。同じような仕様にして作ってみて動作を
理解するのが一番の早道かもしれませんよ。
400 :
名無し@沢村 :03/07/08 21:18
>>398 それだと、全部赤や黄色になってしまうのですが…?
自分でつくったソフトのタイトルバーだけを赤や黄色にしたいのですが…?
後から条件を追加するな
402 :
デフォルトの名無しさん :03/07/08 21:39
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, UINT wParam, LONG lParam ) 関数って、 最後のreturn文は何を返すのが一番いいんでしょうかね?
状況によりけり 返す物が固定なら戻り値を返すようになどなっていない
WM_NCPAINT〜♪
405 :
名無し@沢村 :03/07/08 23:59
407 :
デフォルトの名無しさん :03/07/09 01:18
>>402 普通DefWindowProc()の返り値では。
そういうことじゃない?
>>402 [7]がいいよ![7]!
ぼくならぜったいに7!!!
409 :
デフォルトの名無しさん :03/07/09 19:42
変な質問なのですがお願いします。 IllustratorやPhotoshopには、レイヤー処理をするダイアログがあったと思いますが、 あそこでレイヤー名を表示しているのは、リストボックスやツリービューでしょうか? それともコモンコントロールは使ってないでしょうか。 自分で調べるべきですが、該当アプリが手元に無くて…。 プログラマで持っている人は少なそうですが、もし御存知でしたら是非…。
>409 独自クラスっぽい、SPI++でみるとPSViewCとか出る。 PhotShop7..0ね。
>>410 うわぁ、ダイアログに独自コントロールですか。
ちらつき防止とか面倒そうですねぇ…。
レスありがとうございました。アレっぽい実装にして欲しいと、
要望を出されていたところでして、本当に助かりました。
>412 別に真似しなくてもいいんじゃないかな? リストボックスをオナードローにしてもほぼ同じ物が出来ると思うよ。 まぁ面倒なのは変わらないか(w
ホトショは、mac由来のコードとか結構あると思う。
頭痛いです
Windows9x or 2000にて、仮想CDドライブのようなプログラムを作りたいんですが どう検索して良いか、分からないんですが・・・(デバイス?ハードウェア?) 資料(本)とか購入したいんですが、お勧めのものありますか? (なるべくC++関係で)
>>416 スレ違い
その程度の事を質問するようでは作るのは無理だから諦めろ
だまってDaemonTools使っとけ
419 :
デフォルトの名無しさん :03/07/10 10:26
wavファイルを再生するAPIを教えてください
API初心者です。よろしくお願いします。 質問なんですが、 別プロセスのハンドルを取得するにはどうすれば良いのでしょうか? 実行しているEXEの名前は解っている状態です。
ShellExecute
プロセスを列挙して、OpenProcess.
>422さん ありがとうございます。 さっそく使ってみます。
PlaySound()というそのままのAPIがありました。 情けないです。もう二度とここへは来ません。
425 :
デフォルトの名無しさん :03/07/10 19:45
PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ); の引数は皆さんどうしています? 僕はこんな感じにしているのですが(DirectXゲーム作成時)
427 :
名無し@沢村 :03/07/10 20:49
皆々様方〜、教えてくださらんか、皆々様方〜♪ 自分がつくったwindowのタイトルバーを赤や黄色にするにはどうしたら、いいかな〜? 教えてくださらんか、皆々様方〜♪
430 :
デフォルトの名無しさん :03/07/11 01:25
ここで聞いていいのかわからないのですが、 #define STRICT は1回だけ宣言すれば全部のファイルで共通に作用するのでしょうか?
頭に#が付くのはプリプロセッサで処理される。 と言えばわかるか?
432 :
デフォルトの名無しさん :03/07/11 01:33
>>431 わかりそうでわからない・・・
例えば、
#define ONE 1
と書いても、これが書いていないファイルではONEと書いてもだめだよね
>>432 ネタ?
#define STRICT
と
#define ONE 1
にどれほどの違いがあるってんだ?
435 :
デフォルトの名無しさん :03/07/11 01:48
>>434 ということは、すべてのファイルに書けと
>>435 コンパイル時、どのファイルが読み込まれるかを勉強して下さい
437 :
デフォルトの名無しさん :03/07/11 02:05
>>436 全ファイル共通のヘッダーファイルに書けと?
大抵のコンパイラはオプションで定義できるだろうから、それを使えば? -DSTRICT こんな感じで。
>>438 実際の所どういう動きをするのでしょうか?
>>440 #define が定義された次の行から適用される
後は、#include 等、他のマクロ(プリプロセッサ命令)が
どのように展開されるかを考える
誰もスレ違いだとつっこまないね
444 :
デフォルトの名無しさん :03/07/11 11:01
プログラムの実行中,特定の処理を関数化してその関数をひたすら実行させ 続けたいのですが,どこでよんでやればいいんでしょうか(キー入力があれば 関数で使う変数の値を変えるとか…も入れるもりでつ)? CPU使用率が100%になってもかまわないので. LRESULT CALLBACK WndProcのswitchのdefault:のreturn DefWindowProc の上でいいんですか?
>>444 ひたすらというのがどの程度の頻度を指すか分からんが、
SetTimerでタイマつくってWM_TIMERの中とか
スレッドつくって、そこで延々実行させるとか
>LRESULT CALLBACK WndProcのswitchのdefault:のreturn DefWindowProc
とかだと何かのメッセージが来なければ、実行されない可能性あるし
>446 関数を一回実行するのに数十〜数百msかかるのをCPUフル回転で回し 続けるみたいな感じです.スマソ WM_TIMERかスレッド作って,ですか. 時間が毎回同じでもない(変数によって結構変わる)のでスレッド作ってやってみます. ありがとうございますた.
448 :
デフォルトの名無しさん :03/07/11 13:35
CPUの温度を調べるような関数はありますでしょうか? CPUファンの動作状況なども調べることが出来ればなお良いのですが。
449 :
デフォルトの名無しさん :03/07/11 16:25
他のプロセスの値(例:他アプリのフォーム上に書かれているテキスト等)を取得したく、 FindWindowでハンドルを取得した後、 ReadProccesMemoryを用いてメモリを直接読み取ろうと思うのですが、 (プロセスのハンドル、 読み取り開始アドレス、 データ格納バッファ、 読み取りたいバイト数、 読み取ったバイト数) という引数があり、 2番目の読み取り開始アドレスの取得方法が分かりません。 恐らくプロセスのハンドルを用いて、そのプロセスが使用している開始アドレスを取得するのでしょうが、その方法が解る方いますでしょうか? よろしければご教授ください。
そのフォームとやらが使ってるのが標準のEDITコントロールなら 普通にWM_GETTEXTで取るのが一番楽だと思うが。
451 :
デフォルトの名無しさん :03/07/11 18:16
猫の83〜85章を見ながらMDIアプリを作っています。 やりたいのはMDIクライアントウィンドウにBitmapをBltしたいのですが、猫のサンプルを 見ると個々のMDIクライアントウィンドウのハンドラはstaticに保持とかしてないように 見えるんですが… #単純にMDIClientのハンドラからDC取得して、そこにBltしたいのれす。 MDIクライアントウィンドウが複数ある場合、既に出来ているMDIクライアントウィンドウの ハンドラを取得するにはどうすれば良いのでしょうか?
>>449 450さんの意見に禿同
わざわざデバッグ系APIを使う必要なし
>>451 WM_MDIGETACTIVEとかのメッセージでHWNDを取得できる
454 :
デフォルトの名無しさん :03/07/11 19:16
>>453 有難う御座います。確かにヘルプには
Return Value
The return value is the handle of the active MDI child window.
とあるので間違いないのですが、WM_MDI…メッセージの戻り値ってとこが解りません…(無知)
SendMessageの戻り値でしょうか?
>>454 >SendMessageの戻り値でしょうか?
その通り
てか、猫の85章にも書いてあるはずだが・・・
それはさておき、
>#単純にMDIClientのハンドラからDC取得して、そこにBltしたいのれす。
だとすると、
MDIクライアントウィンドウのプロシージャのWM_PAINTで描画しないと、
再描画が発生すると、「 マ ズ ー 」になりそうだが・・・
456 :
名無し@沢村 :03/07/11 20:10
>>448 CPUに温度センサーをつけて、センサーか送られてくるデータを取得する。
関数だけでは無理。
一応CPUその他の温度やファンの回転数を監視するチップは大抵のPCに 組み込まれてるが。 その辺を自力で叩く根性がないならMBMでも入れてそっから情報貰え。
はいはい
ほいほい
460 :
デフォルトの名無しさん :03/07/11 22:56
CStaticにこちらの希望のフォーマットのビットマップを選択させるにはどうすればいいですか? たとえば画面のプロパティーでRGB32でもCStaticはRGB8にしたい。など。 RGB8のDIBをそのままBitBltしたいので。 おねがいします。
461 :
デフォルトの名無しさん :03/07/12 02:30
WM_SYSCOMMANDが来た時は、breakで処理を終えないで、 return DefWindowProc(); をするべきなんでしょうか? もしそうならば、その理由はどういうものなんですか?
あるサイトで case WM_DESTROY: ShowWindow(hWnd, SW_HIDE); PostQuitMessage(0); break; としていて、コメントにMicrosoftが仕様と主張するOSのバグの対策をしていますと書いてあるのですが、 どういうバグへの対策が施されているのでしょうか?
タスクバーに空のボタンが残るってやつだっけ
えっと、フックについて質問です。あるプロセス内でインストールされたフックを ローカルフック、ライブラリ(DLL)によってインストールされたフックを グローバルフックという呼び方でいいんですよね? で、本題ですが、プロセス内でグローバルフックをインストールする方法って ないんでしょうか?理由としては単に DLL を作るのが面倒なんですが…
466 :
デフォルトの名無しさん :03/07/12 12:02
スレッドフック 単一のスレッドに対するフック グローバルフック 全てのスレッドに対するフック ローカルフック そんな名称は存在しない? システムフック グローバルフックの旧名称 スレッドフックのうち同一プロセスに対するものの場合のみDLLにしなくても良い
DLLってなんと読むんですか?
どるる
どぅるる
>>464 検索したら、
この引数にSW_HIDEを入れて呼び出せば、そのウィンドウは見事に消え去り、タスクバーにも表示されなくなります。
と書いてありました。
でもこれ書いていない時でもそんな現象にあったことないんだけどなぁ・・・
Win95とか98とかでは、たまに起こってた記憶が。
474 :
デフォルトの名無しさん :03/07/12 16:02
>465 ダイナマイト・ロング・レディー
ディーエルエルって言ってる俺
どぅーどぅるびー
ドゥードゥルバグ
ダ、ダ、ダ、ダイナミック・リンク・ライヴラリー
でぃーいれぶん
まじレスするとデルだろ ∂
DLLのアイコンは、初心者には「花」に見えるらしい
while( 1 ) { if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { if( msg.message == WM_QUIT ) break; TranslateMessage( &msg ); DispatchMessage( &msg ); } else { メイン処理 } } という形をとった場合、メイン処理で処理を終了させたい場合 break; でwhile文を抜けるのが良いのか、return 0;でプログラムを終わるべきなのかどちらでしょうか?
488 :
デフォルトの名無しさん :03/07/13 11:28
MessageBeepは &Hffffffff MB_ICONASTERISK MB_ICONEXCLAMATION MB_ICONHAND MB_OK ↑これ以外の音はならせないんですか? MailBeepに設定されてる音とかをならしたいんですが
489 :
デフォルトの名無しさん :03/07/13 11:29
実行中の他のプログラムのコマンドライン文字列を取得する方法はありますか。 実行ファイルAが実行ファイルBを起動するのですが、その実行ファイルBに 渡されたコマンドライン文字列をコソーリ見たいのです。
490 :
デフォルトの名無しさん :03/07/13 11:37
B.exeのフリしてAに立ち上げてもらえ。 その後、改めてBを立ち上げろ。
>>489 BがGUIアプリなら、中に潜り込んでGetCommandLineだろ。
>>490 PlaySoundですか、
PlaySoundは非同期に再生したときかってに終わってくれるのかな?
ちょっとためしてみます。
494 :
デフォルトの名無しさん :03/07/13 12:42
>>492 ありがとうございます。
しかし、どのようにして潜り込むのでしょうか(@_@)
関数名だけでもヒントをください…m(__)m
>494(489) VBプログラマ質問スレとのマルチポストの上にさらにヒント請求か。 厚 か ま し い な !
>>494 エッ!? ぶっ、ぶいびぃ・・・ですか。
・・・あなたには多分、無理です。
497 :
デフォルトの名無しさん :03/07/13 17:59
エディットボックスコントロールに、 テキストをドラッグアンドドロップするには、 どうすればいいの? なぁんか、できないんだよね。 CreatWindowのとこでなんかするの?
498 :
デフォルトの名無しさん :03/07/13 18:30
このスレって参考図書は載ってないですね 参考図書もいくつか載ってると良いですよね
別に
500 :
デフォルトの名無しさん :03/07/13 18:34
このスレって参考図書は載ってないですね 使えないですよね
このスレって使えないですよね。
502 :
デフォルトの名無しさん :03/07/13 18:40
使えない
503 :
デフォルトの名無しさん :03/07/13 19:44
>>496 いいえ、一応C言語でのWin32APIプログラミングは心得ているつもりです。
(プログラミングWindows第5版上巻の内容はすべて理解しています)
それでも無理なのでしょうか(汗)
505 :
デフォルトの名無しさん :03/07/13 19:51
Aは実行中でもBが実行される前なら問題ないだろう
このスレって使えないですよね。
そりゃPlatform SDK Documentation見ればほとんど解決するからね
いやいや喪前には負けますよハゲ
> (プログラミングWindows第5版上巻の内容はすべて理解しています) 「すべて」「理解」してるなんてスゲー!
512 :
デフォルトの名無しさん :03/07/13 23:23
結局このスレには489の質問に答えられる香具師はいないってことだな。 もちろん漏れもだが。
513 :
デフォルトの名無しさん :03/07/13 23:31
492の「潜り込む」というのは、システムフック(グローバルフック)のことかと。 とりあえずDLLと共有メモリの作り方を知らないとできない。
514 :
489です :03/07/13 23:34
>>513 ありがとうございます。勉強してみます。
↑741からの書き込みだった。。。
つか、素直にAdvanced Windowsでも読んだほうが早いと思うが。
518 :
デフォルトの名無しさん :03/07/13 23:47
あるサンプルソースでCreateThread関数で、 int d; hThread1=CreateThread(NULL,0,fnThread1,0,0,&d); hThread2=CreateThread(NULL,0,fnThread2,0,0,&d); とあったのですが、 最後の引数は、 lpThreadId 1 個の変数へのポインタを指定します。関数から制御が返ると、この変数に、スレッド識別子が格納されます。 とあるんですが、スレッド識別子が格納されるというっことは、別々の変数を関数側に渡したほうが良いん&ですよね? &d1,&d2のように。
519 :
デフォルトの名無しさん :03/07/13 23:56
>>518 スレッドハンドルだけ使って、スレッドIDは使わないなら、
518のような書き方も構わない。
dは便宜上セットしているというだけ。
スレッド識別子を使わないなら、特に別々にする必要は無いかと。 ちなみに、Cランタイムな関数使うときは_beginthreadが推奨だけど、 その辺はOK?
_beginthread/_beginthreadexはAPIじゃないけどな。 まぁ、普通はこっち使うけど。
522 :
デフォルトの名無しさん :03/07/14 00:10
LPDWORDって、unsigned long* だったんですか? int型のポインタ渡そうとしたら起こられましたけど
>>518 戻ってきた値をなにかに使うんじゃなければ、単に空の箱だけ用意し
とけばいいじゃない。
>>519 >>520 >>521 >>523 情報ありがとうございました。
難関に思えたスレッドというものがこんなに簡単に実現できるとは・・・。
注意点とかありますか?
スレッドあんまり作成しないほうが良いみたいですが
>>522 typedef unsigned long DWORD;
typedef DWORD *LPDWORD;
だな。WTypes.h を参照
>>524 作るのは簡単。
しかし、使いこなして問題が起こらないように維持するのは、
規模が少し大きくなるだけで、絶望的に難しくなる。
>>525 おお、そうですか
そういうのって、コンパイラのある場所(puroguramフォルダ)にあるんですかね?
>>518 ちなみに、最後の引数、NT系はNULLでも動いちゃう。
それで安心してたら、95系でコケてNULLは使えないと気づく・・・
>>527 WTypes.h より windif.h の方が一般的かもしれない。
場所は開発環境、Win32SDKなんかをインストールした場所によって異なる。
検索しろ。
>>530 windef.hでした。非常に恥ズイ…
指摘感謝。
532 :
デフォルトの名無しさん :03/07/14 07:00
リソースでつまずいた・・・
534 :
デフォルトの名無しさん :03/07/14 23:42
LoadImage関数って、NTでは使えないみたいだね でもXPでは使えるみたいだね
>>534 そうなの?
NTの環境ないから試せないけど、
MSDN読む限りでは、使えそうだけどな・・・
APIの関数の使い方みたいなの乗ってるサイトで便利なとこありますか? お薦め教えてください。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
539 :
デフォルトの名無しさん :03/07/15 10:23
NT系のマルチモニタ(デュアルディスプレイ)の制御をする APIを知りませんか? 手がかりもないのでMSDNライブラリの検索にも全然 引っかからなくて。 お願いします。
542 :
デフォルトの名無しさん :03/07/15 11:40
>>540 ありがd!!
こいつを手がかりにまた捜してみます。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
VBAのユーザーフォームのイメージコントロールに貼り付けた画像の、 例えば、上から10ポイント左から20ポイントのドットの色の情報を 取得する方法があれば、教えてほしいのですが・・・ API関数のなかにありますか?
546 :
デフォルトの名無しさん :03/07/15 19:37
>>534 日本語版MSDNヘルプが古いだけ(NT 3.5では使えなかったという意味)
NT4以降なら使える
がいしゅつにもほどがある
>>547 だが、4.0以降と書いてあるにも関わらず、サポートしてねぇよ、とも書いてあるので
3.5では使えないけど4.0以降なら使える、という情報は読み取れない。
まぁ、日本語版は信用するなってこった。
英語版見ればNT4以降で使えるのは明らかだがな もっとも最近英語版の記述も怪しい
Cのisspaceに代わるAPIってありますか?
551 :
デフォルトの名無しさん :03/07/16 12:29
そのフォルダが存在していなくても、フォルダパスであれば真になるようなAPIはあるでしょうか。 PathIsDirectoryはフォルダが存在していないと偽を返してしまいます。
>>551 拡張子のないファイルとフォルダが
両方とも存在しないとして、それをどうやって区別するの?
>>552 その場合はファイルとして判定してくれればいいです。
単純に言うとパスの最後に\があるか否かを判定するAPIがあればいいんですが・・・
やはりパスの先頭からIsDBCSLeadByteを使って走査していき、
最後が\か否かを判定する関数を自作するしかないんでしょうか。
>>553 そんな君専用のようなAPIが存在するわけが無いだろう
Windowsではドライブ以外はフォルダの最後に\はつかないのが普通
>最後が\か否かを判定する関数を自作するしかないんでしょうか。 その部分だけなら作るのに30秒かからないが・・・
というかそんなチェックが本当に必要なのか? APIに丸投げしてエラーをチェックした方がよっぽどまし。ということもありえるぞ。
リストビューにファイルパス(フォルダパスではない)を一覧していまして、 1. リストにファイルパスを与えた場合はそのままファイルパスをリストに追加 2.リストにフォルダパスを与えた場合はフォルダ内のファイルパスをリストに追加 とし、 3.ファイルが存在する場合はそのまま表示 4.ファイルが存在しない場合は追加したファイルパスを赤く表示 としたいのです。 このとき存在しないフォルダパスを与えてしまうと、4.の処理のために この存在しないフォルダパスがリストに追加されてしまいます。 自分でやるしかないみたいですね・・
CRT使ってよくて MBCSなら、ch='\\'として BOOL IsLastChar(LPCTSTR str, UINT ch) { BYTE* pLast = _mbsrchr((const BYTE *)str, ch); return (pLast && (*_mbsinc(pLast) == '\0')); }
こういうパターンは想定しないの? c:\ \\servername\
>>557 >この存在しないフォルダパスがリストに追加されてしまいます。
↓この定義からすると何ら問題ない動作のような気がするんだが。
>>553 >その場合はファイルとして判定してくれればいいです。
>>560 ファイルパスなのかフォルダパスなのか区別のしようが無い場合は
ファイルパスとして判定してくれれば良いということです。
(パス末尾に\をつけて)フォルダパスとして与えたつもりなのに
ファイルパスとして判定されるから困るのです。
HDDスリープさせたいんだけど、 Linuxの「hdparm -Y」と同じ働きをする関数ある?
>>561 >(パス末尾に\をつけて)フォルダパスとして与えたつもりなのに
フォルダパスであることがわかってるならわざわざ判定させる必要ないじゃん。
>>563 それをパスだけで判定できないかという話です。
>>563 そんなこと言ってたらPathIsRootやPathIsFileSpecやPathIsDirectoryがいらないなw
>>565 それは「実在するかどうか」という判断をするための物だろ。
「実在しないがフォルダパスである」とわかっているものの何を判定しろというのか。
>>566 C:\hoge\
↑これはフォルダパス?
>>567 C:\hogeというフォルダが実在すればフォルダパス。
C:\hogeというファイルが実在すればファイルパス。
ファイルもフォルダもなかったら自分で決める。
>>568 ではC:\にhogeというファイルを作ってPathFileExists(_T("C:\\hoge\\"))を実行するとTRUEが返ってくるはずだな
やってみりゃイインジャネーノ
漏れのパソコンではFALSEが返ってきますたがバグですか?
569が何を言いたいのかサッパリわからない。
>>568 C:\hogeというファイルが実在しててもファイルパスじゃねーじゃん。
>>574 だからどうしたとしか言いようがない。
自分でわかっている(末尾に\を付与する)なら判定させる必要ないじゃん。
>>575 おい、知ったか。嘘を言っておいてそれか。
>>576 何ですかこの粘着は。568は別にPathFileExistsの挙動について述べたわけじゃねえだろ。
>>575 自分では判っているから末尾に\をつけるの!
あのですね、 void run(char* path) { if(isdir(path)) }
途中で投稿してしまった・・・
void run(char* path)
{
if(isdir(path))
>>557 の2の処理 ;
else
>>557 の1の処理 ;
}
簡単に言うとこんなことをしたくて、isdirに該当するAPIはあるかという質問なんですよ。
んで無いみたいなので自作するしかななという結論にとっくに至りました。
>>575 あなたもういいです。
...butes
APIじゃ無いけど、_splitpath でいいんじゃねーかと
>>580 >>557 の仕様を実現するのにそういう機能のAPIを要求するお前のセンスに問題がある
ような気がするよ。
そうかなぁ。MakeSureDirectoryPathExistsは\がパスの最後にあればディレクトリだとみなすのでそんなAPIがあってもいいと思ったんだけど
>>584 splitpathがあるんだからWin32APIに求めてもそれほど変でもあるまい。
>>585 MakeSureDirectoryPathExistsは「末尾に\を付与することを要求」しているだけで
「\がパスの最後にあればディレクトリだとみなす」わけじゃないだろ。
\が付いてなければ「不正な引数」と判断してるだけだ。
>>588 違うだろ。
末尾が\じゃ無い場合は、その前の\までのディレクトリしか作らない。
頼む。今後のためにも知ったか厨は消えてくれ。
if (!pathというファイルが実在する) {
if (pathというディレクトリが実在する)
>>557 の2の処理;
else
>>557 の4の処理;
else
>>557 の1の処理;
>>593 今話してるのは「存在しないフォルダパス」の話だ。
>>595 C:\dir D
C:\dir\ D
C:\file F
C:\file\ -1
C:\notexist -1
C:\notexist\ -1
>>587 いや、
>>557 にある3つの動作(条件)を実現するのに、最初に「ディレクトリかどうか」を
判断しようとするセンスに問題があるって事だろ。
>>594 それだと4の処理で存在しないフォルダパスが追加されてしまう。
追加するのは「ファイルパス」。
>>596 存在しなくてもDになるようなAPIの話だ、ってログ読めよ!
>>600 渡されるパスに末尾\がついてて「これはフォルダパスだ」と主張してる場合でもか
すでにAPIに無いのはわかっているんだから、藻前らみんなスレ違いですよ。
>>601 「実在しないフォルダパス」をどうするか仕様として与えられておりませんので(w
>>603 リストにはファイルパスを表示する仕様なのでフォルダパスは表示しない。
たとえ存在しないフォルダパスだとしても。
実在しないパス文字列をどうやって生成するのか知らんが、「フォルダパスの末尾には必ず\が ある」ってのがわかってるなら、フォルダかファイルかの判定は済んでいるも同然だよな? なら 末尾に\がある→実在すれば557の2、しなければ何もしない 末尾に\がない→実在すれば557の1、しなければ557の4 でいいんじゃねえの? なんでひとつのAPIで済ませようとするのか不思議だ。
>>606 そういうAPIがあるなら使いたいというだけで無いなら自作するとかなり前に結論が出てます。
>>608 それにしても
>先頭からIsDBCSLeadByteを使って走査
ってのはやっぱりセンスねえんだなぁ・・・
>>609 CRT無しでもっと良い方法がありますか?
>>610 (末尾のバイト=='\' && !IsDBCSLeadByte(末尾の1個前))
ならフォルダパス。
なお、文字列の長さが不明の時はlstrlen APIで調べる。
おれに言わせりゃノーセンス
>>611 文字列の途中でIsDBCSLeadByteを使っちゃいかんよ
そもそも>557なアプリの仕様に問題があるのだ。 論点がずれてるぞ。
>>611 SJISの場合二バイト目でもIsDBCSLeadByteに引っかかる場合があるぞ。
"C:\最後がそういう文字な名前\" の場合誤診する。
後ろから行きたければIsDBCSLeadByteがFALSEを返すとこまで戻って
戻った字数が偶数か奇数かで判定
今日は知ったかぶりが多いよねえ
>>615 WTLの_IsDBCSTrailByteがまさにそんなコードだったと思う。
MultiByteToWideCharでUnicodeに変換してから末尾の文字を拾えばいいじゃん。
>>620 そかな。頭から走査するよりはマンドクサクは無いような…
int mbcslen = lstrlen(path);
int widelen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, path, mbcslen, NULL, 0);
LPWSTR widepath = new WCHAR[widelen];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, path, mbcslen, widepath, widelen);
if (widepath[widelen-1] == L'\\') { // pathはフォルダパスである
:
:
bool IsLastBackslash(LPCTSTR lpszPath) { bool bTail = false; #ifndef _UNICODE int nChar = lstrlen(lpszPath); for(int i=nChar; i>0; i--){ if(!::IsDBCSLeadByte(lpszPath[i - 1])) break; } bTail = ((nChar > 0) && (((nChar - i) & 1) != 0)); #endif //_UNICODE if(bTail) return false; else return (lpszPath[lstrlen(lpszPath) - 1] == _T('\\')); }
質問する場所ここであってるかどうか分かりませんが。。。 コンパイルの仕方が分かんないです OSウインドウズXP使ってるんですが とりあえずBorland C++ Compiler 5.5落としてきて #include <stdio.h> maim() { printf("TEST"); } てファイルをメモ帳で書いてtest.cって名前で保存してみたら 一応test Cファイルって出来ました。 コマンドプロンプト C:\Document ***>bcc32 text.c て入力してみたんですが 'bcc32' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 とかでます。
あまりにすれ違いだからみんな固まってるよ。 Cスレでちょっと前に同じ話題が出てたから、そっちを見てきなさい
>>623 質問する場所が間違っている。
そのエラーに関する情報はWindows一般の使用法に関するものだ。
スマソ逝ってきます
>>566 PathIsFileSpecは「実在するかどうか」は関係ないわけだが
はー、ファイルパスとかフォルダパスとか…。 そんな単純な要求で、こんなに会議になるとは…。 ここの人達のPG能力がわかるレスだね。(;´Д`) まさか、それで趣味じゃなくて仕事にしてるの??<PG …まさかね。( ´∀`)アハハ
とりあえず質問する前にMSDNを見るのは当然のことながら回答する方もMSDNを見るべきだ。
このスレが物凄く情けなく見えた瞬間に立ち会えた
またログを読まない奴が一人来たか
_| ̄|○ ログ読んどけばよかった・・・・・つか違う
デスクトップのアイコンを詳細表示にしたいんだけど どうしてもできません。 ListView_InsertColumnがうまくいかない・・・ 誰かヒント教えれ〜 (T T
SubItemはどうしてるんだ? 自分で入れてるのか、それともデスクトプーが勝手に入れてくれるのか
末尾"\"判定のもっともAPIスレらしい答えは CharPrev(path, path + lstrlen(path)) じゃないの
637 :
デフォルトの名無しさん :03/07/17 16:02
CreateProcess()でアプリを起動し、WaitForSingleObject() で終了待ちしてる んですが、その起動したアプリで int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int nCmdShow ) { HWND hFgWnd = ::GetForegroundWindow(); ::MessageBox( hFgWnd, "キタ━━━(゚∀゚)━━━ !!", NULL, MB_OK); ってやると、双方が固まってデッドロック状態(?)になります。 MessageBox( NULL, ...) とすると問題なく hFgWnd を調べると CreateProcess をした側のメインウィンドウ(WaitForSingleObject()で待機中)なんですが、 これってまずいのでしょーか?
まずいね
>>637 つーかそういう場合、待機関数を別スレッドにせずに使うか?
ウィンドウハンドルを指定するとそのウィンドウを保持するプロセスに何らかのアクセスを
するとかじゃないのかな?
なんにしろ、ウィンドウを構築しているスレッドでプロセス終了を待つと
起動中はそのウィンドウが反応しなくなるんだから、別スレッドで待つべきだと思う。
そもそも他プロセスのハンドルをMessageBoxとかに渡していいものなの?
パスがディレクトリかどうか判定 ・PathRemoveFileSpec にパスを食わせて、その戻り値をしらべる。 ではダメなのか?
「いまさら何を言っているのかね、君は。」
>>641 戻り値がどうなったらファイルでどうなったらフォルダなのか問い詰めたい。
機器でSRAMカード(ATAじゃなくて、ただのSRAMカード)をメモリとして使ってます。 WindowsでSRAMカードの内容を読みたいのですが、どうすれば良いのでしょうか? お願いします。
646 :
ところでSRAMカードってなんだ? :03/07/17 21:19
>>645 愚問だな。
そこにSRAMカードがあるからに決まってる。
>>644 リニアなメモリカードなんか普通は使わんから
ツールがその辺に転がってるわけない罠。
ADTECのCardUTとか専用のツール買え。
>>635 亀レスすまそ。
そもそもLVCOLUMN構造体の中身をどうして良いのか
わからんです。
SubItemやTextは、windowsが決めてると思うんだけど
どうやってそれを反映させるのかがわからない・・・
自分で適当に列を追加してもうまくいかない〜 (T T
>>648 デスクトップは普通詳細表示しないから
使いもしないSubItemはわざわざ追加してないと思うナリ
っつかまず普通のリストビューで実験してみれ
650 :
デフォルトの名無しさん :03/07/18 02:59
Windows API 版 atexit() みたいなのってないですか? プロセス終了時に呼ばれるコードをフックしておけるみたいなやつ。
>>640 USERオブジェクトはウィンドウステーションとデスクトップが
同じならプロセス間共有可能であることが保証されてるから問題ない。
それがShatter系のセキュリティホールの原因にもなってるわけだが
ツールでSRAMカードを読みたいんでなく、 アプリを作りたいんですが、こういう場合にどうしてます?
653 :
デフォルトの名無しさん :03/07/18 09:01
DDKってダウソ出来ないんでしょうか? VC++なら買ってますが。
654 :
デフォルトの名無しさん :03/07/18 09:08
リッチエディットコントロールで、 右クリックするにはどうすればいいか、おしえてぽ。
655 :
デフォルトの名無しさん :03/07/18 09:12
RAMDISK.SYSとかいうのがありますね。 でも、使い方が分からないんですが、何を調べれば分かりますか?
>>654 リッチエディットコントロールからマウスカーソルが外れないように気を
つけながら、マウスの右ボタンを注意深く押す。
RAMDISK.sysは、メインメモリからいくらか割り当てて、 それを仮想ディスクとするものですヨ
659 :
デフォルトの名無しさん :03/07/18 10:03
>659 Shift_JISの2Byte目の範囲を言ってみ。
ああそうか。CharNextがあるから、2byte目には当たらない、という話か。 たしかに、IsDBCSLeadByteのところは要らないネ
>>660 それはCharNextでスキップできるじゃん
あ、かぶった
>>659 のページはWinamp日本語化キットの作者のページみたいなんだけど、
キット使ってる自分としてはなんか微妙な気持ちになった
それからDBCSネタついでにもう一つ質問。 Str系API(StrStrとか)ってDBCSを考慮してるっぽいんだけど、それが明記されたドキュメントってどっかにある? StrStr("も", "\\")の結果で考慮してるっぽいって思っただけなんだけど・・・
いまさら感が拭えんけど。
>>643 MSDNより
> PathRemoveFileSpec
> Removes the trailing file name and backslash from a path, if it has them.
で、
> Returns nonzero if something was removed, or zero otherwise.
なので、パスと思われるものを与え、戻り値が FALSE ならば
削除すべきファイル名が入っていなかった。
つまりディレクトリパスとして妥当であるといえるのではないかね。
if( !PathIsFileSpec( path ){
if( !PathRemoveFileSpec( path ) ){
パスはディレクトリであるという処理
}
}
うまくいくかは知らん!
>>666 やってみりゃわかることだが、
それ以上醜態を晒すのはやめとけ・・・・
近頃、回答者のレベルが著しく下がった気がする
>>652 何にも知らないならまずJEIDAのPCカード規格書でも買うべきだな。
ドライバが必要なので、DDKも必要だ。
またはドライバ/ライブラリだけ調達汁。
95系のWindows用ならフリーで見つけたが、NT系は見たことないな。
>>670 そういうこと書くからレベル低いって言われるんだよヽ(`Д´)ノ ウワァァァン!!!!
DBCS系のAPIって、日本語Windowsでは動作するけれど、英語Windowsでは動作しませんね。 それで、ShiftJIS文字列を扱う時は、いまだに昔ながらのISKANJIを使ってたりします。 でも、もしかするとDBCS系のAPIで処理する文字コードを設定するAPIってあるのかな?
久しぶりに香ばしくて(゚д゚) ウマーでした
>>672 > DBCS系のAPIって、日本語Windowsでは動作するけれど、英語Windowsでは動作しませんね。
> それで、ShiftJIS文字列を扱う時は、いまだに昔ながらのISKANJIを使ってたりします。
そういうことをするとヨーロッパ人から余計なことをするなと言われたりする。
欧州に藻前さんのアプリを使う人は誰一人いないのかもしれんが
> でも、もしかするとDBCS系のAPIで処理する文字コードを設定するAPIってあるのかな?
たとえばIsDBCSLeadByteExやCharNextExAはコードページを指定できる。
つーかCharNextEx「A」ってどういうこっちゃ?
サロゲートの範囲はハードコードせいってこと?
>>672 IsDBCSLeadByteは…引数の文字がASCII(&半角カナ)か、
ASCII(&半角カナ)以外かを判断しているだけで、
APIに無ければ、自分で関数作れるような気がするが。
オレの気のせいだったか?
> いまだに昔ながらのISKANJIを使ってたりします。 って言ってるじゃん。で、自作ではコードページに応じて 動作を変えるなんて芸当はできないでしょ。
>>675 Aは機能拡張版です
・・・ということではないのかな
679 :
デフォルトの名無しさん :03/07/19 00:56
CreateWindow関数の最初の引数って、何を渡せばいいのですか? これは何か使われたりするのですか?
>>679 WINCLASSで登録したクラス名
使われるかどうかは知らん
MSDNで検索したのですが、CWnd::InvalidateRectしか検索できませんでした(voidの戻り値でした)。 InvalidateRectは、戻り値はあるのでしょうか(VC6.0ではintらしいですが)? ある場合はどういう値が帰ってくるのでしょうか?
>>678 頼むからMSDNくらい読んでください
「Ex」が機能拡張版という意味で
「A」がANSI文字版、「W」がUnicode版という意味です。
つまりこの関数はUnicode版がないということで、
> サロゲートの範囲はハードコードせいってこと?
というレスにつながるわけです。
Windowsで普段ユニコードと呼んでるエンコーディングはサロゲートを含まないんじゃなかったっけ?
>>684 2000以降はUTF-16でサロゲートに対応してる。
>>683 つか、そもそも引数がTCHAR/TSTRじゃないからな。
>>657 そうゆうネタじゃなくて、まじめに教えてぽ。
ポップアップメニューが出ないのはなぜ?。
689 :
デフォルトの名無しさん :03/07/19 11:32
WM_MOUSEMOVEのメッセージがきたら ウィンドウの位置と大きさを取得したい っつーか、 WM_NCLBUSTTONDWONでnHITTESTがHTMINBUTTONの時に ウィンドウの位置と大きさを取得したい そんなAPIはなんですか?
USB機器取り外すときに、いちいちタスクバーにマウスを持っていって 停止操作しなくちゃいけないのが面倒なので、なんとかしたいと考えています。 USB機器を取り外すにはどの辺りのAPI叩けばいいでしょうか?
>>689 GetWindowRectではいけない理由があるなら教えてくれ。
>>691 アプリケーションが終了した位置をiniに保存するという処理を
しています。
しかし、WM_NCLBUSTTONDWONでnHITTESTがHTMINBUTTONで
最小化し、さらにその状態で終了されたら次回にアプリを
立ち上げたときとんでもない位置にウィンドウが配置される
この問題を回避するためにいろいろ考えてるわけです
GetWindowPlacement
検索すりゃそのためのAPIがすぐ見つかるけどな
GetWindowPlecementを見たがウィンドウの状態がわかっても 使い方がわからん。確かに最小化の状態から最小化の前の ウィンドウ位置に戻っているがどうやって使うんだ? GetMessageを使ったとして小生はVBで使うことを想定して 質問しているからウィンドウプロシージャメッセージで受け取る タイミングがわからんし VBのイベントハンドラって限られてるし すれ違いかどうかわからんが ヒントくれ
>>695 VBはわからんが、
俺のプログラムでは、WM_CLOSEなどの、ウィンドウが破棄される前にGetWindowPlacementでゲットしたデータをiniに保存しておき、
WM_CREATEで、SetWindowPlacementで復元してる。
最小化の問題があるから、復元する前に WINDOWPLACEMENT.showCmd を適切に修正してる。
>>696 VCではそうするのか。参考になったよ
WINDOWPLACEMENT構造体の中に最小化であるという情報と
復元の位置が入っていると信じて使ってみるぽ
しかし、GetWindowPlacementでは日本語のくせに
WINDOWPLACEMENTからいきなり英語で解説してるからMSDNは苦手だ、、
VC++6.0付属のMSDNライブラリですら、MFCのほうで引けばWINDOWPLACEMENT も日本語で説明してあったりするが。 ちなみにGetWindowPlacement/SetWindowPlacementを使うと、タスクバーが上なんか にあったりすると見事にずれるらしい。
GetWindowPlacementで位置とサイズだけ保存しておいて復元にはSetWindowPosを使ってる漏れ
700 :
デフォルトの名無しさん :03/07/19 13:31
700
702 :
デフォルトの名無しさん :03/07/19 14:48
BCCでリソーススクリプトを使う方法が全然分かりません。 RCファイルをを拾ってきてcppファイルと一緒にメイクしたら 以下のようなエラーが出てきて上手くいきませんでした。 Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) cppファイルは単独でobjファイルにコンパイルできるし、 RCファイルも単独でRESファイルにコンパイルできます。 何がいけないのか良く分からないのです。 >2の猫のC言語のサイトではマイクロソフトのやつを使ってるみたいで、 なんかよく分からないんです。 BCC系の詳しいサイトを教えて下さい。 お願いします。
>感謝汁 おまえがな
耳から感謝汁が垂れてきたという意味だろ
>>702 main 関数はあるのか?
WinMain なら -tW を付けてみる
USB機器を取り外すAPIに関して情報ありませんかー? どこそこのスレで聞けとか、実現してるフリーウェアがあるよ、 などでもいいのでプリーズ。
CM_Request_Device_Ejectを発行しませう。
>705 ありがとうございます なんか設定がおかしかったみたいです
>>707 ありがとうございます!大変参考になりました!
>>707 おおー、こんなのあったのか。
漏れもいちいちトレイから操作するのが面倒で、
なんとかできんかなーと思ってたところだ。
ハードウェア寄りの面倒なコーディングが必要なら、
そこまでする気にもなれんなーと思ってたんだが。
>>688 ネタじゃないってば。
やっぱり、エディットコントロールの
ポップアップメニューの出し方はわからないまま。
コピペのメニューを出したいんだけど、出ない。
とりあえず、クリップボードを使って
コピーすることにしましたが。
>>711 処理系をBCBかDelphiかVBにしたら?
>>711 っていうか、リッチエディットコントロールにそんなものないから自分で
実装しないと駄目だよ。聞くまでもない。
714 :
デフォルトの名無しさん :03/07/20 00:27
LoadImage関数の戻り値はなにになるんでしょうか? MSDNで調べたのですが、LoadBitmap関数しか見つかりませんでした
>>714 画像ファイルを読み込みたいんなら
戻り値は単にHBITMAPにキャストすればいい
turb C++でCを使ってプログラミングもどきをしているものです。 MIDIや、WAVのファイルが再生できるDLLやヘッダー無いですか? あちらこちらのサンプルコード使ってみたり、ぐぐってみたりしたけど見つかりません。 教えてください。
本当に探したのかと問いたい。問い詰めたい。小一時間問い詰めたい。 おまえただ「ぐぐってみた」って言いたいだけちゃうんか、と。
7ラタ
コマンドプロンプトから起動されたWinMainで始まるアプリが、 コマンドプロンプトの標準出力に出力する方法ってあります?
CreateWindowの最後の引数は、NULL固定ですよね? 将来的に使われるかもしれないってことですよね
ShowWindowの戻り値について質問なんですが、 ウィンドウが以前から表示されていた場合は、0 以外の値が返ります。 ウィンドウが以前は非表示だった場合は、0 が返ります。 とあるのですが、ウィンドウが以前から表示されていた場合とは、どんな場合なんでしょうか?
ShowWindow(hWnd, SW_SHOW); ShowWindow(hWnd, SW_HIDE);
WS_VISIBLEスタイル(ry
>>725 WM_CREATEでLPARAMをLPCREATESTRUCTにキャストして->lpCreateParamsで使うユーザ定義の引数
用途はキミ次第
ディスプレイに画像を表示しないで、色の情報を 取得することはできますか? たとえば、あるbitmapの上から10ポイント、左から30ポイント の位置の色の情報を取得したいのですが・・・ ディスプレイから取得しない方法を教えていただきたいのですが・・・
Bitmapリソースなら、CompatibleDC使えばいい。 Bitmapファイルなら、自分で解析しろ。
>732 >Bitmapファイルなら、自分で解析しろ。 まんどくそい。 API一発でなんとかならないですか?
>>733 LoadImageで読んでSelectObject→GetPixel、ただし画面の色数に影響されるかも
解析するしかない。
CreateDIBitmap BITMAPINFOHEADER あたりでググれば
わかるかもね。
ひょっとして
>>733 はフィッシャーマンだった?
736 :
デフォルトの名無しさん :03/07/21 20:40
>>734 LoadImageはリソースしか読めん。
出直してまいれ。
えっと…。 キャラクタベースの文字列とか文字表示APIってどんな名前ですか? win32 コンソールアプリで使いたいんです。具体的には色表示したり したいんです。 エスケープシーケンス使えと言われそうですが、NT/2000/XP の コマンドプロランプとではサポートしていないのです
× コマンドプロランプとではサポートしていないのです ○ コマンドプロンプトではサポートしていないのです
>>737 2000などでもエスケープシーケンスなら使えるっちゅうに。
まあ、それだけではなんだから、「猫でもわかる」でぐぐりれ。
>>737 MSDNライブラリの目次から[Windows 開発]-[Windows ベース サービス]-[ファイルおよび入出力]-[SDK DQメント]-[ファイル入出力]-[コンソール]を見れ
742 :
名無し@沢村 :03/07/21 21:37
>>737 しょうがない、マジレスしてやるか。
printf("<COLOR=0xFF0000>Hello world</COLOR>\n");
で色が変わる。
あ、そうそう、
#include <html.h>
忘れるなよ。
744 :
デフォルトの名無しさん :03/07/21 21:50
>>733 BMPをAPIでDIBSectionなどに読み込むと、デバイスコンテキストの属性の影響を受ける可能性があるから、自分で解析したほうが確実だよ。
横幅が4の倍数ピクセルの24bitBMPなら、そんなに難しくはない。
BITMAPFILEHEADER内(+10バイト)にあるRGBデータの先頭アドレスにx*3+y*横幅*3を加えれば、(x,y)のRGB(バイトイメージではBGR)のデータを得られる。ただし、デフォルトの座標系はGDIとは上下逆だから要注意。
横幅や高さなどはBITMAPINFOHEADER内にあるから、そこを読めばよい。
>>733 その程度の大した作業でないことすら面倒くさいのか?
適正無いから早めに身を引いた方が楽だよ
746 :
デフォルトの名無しさん :03/07/21 23:13
>>745 もしもAPI一発呼び出すだけで色が取れたら?
ビットマップファイルを解析するなんて時間の無駄だよね?
下調べせずに無駄なコードばっかり書いて納期を守れない
>>745 が
邪魔で仕方ない。
はよこの業界から去れや。
>>ナナハン ワラタ
しかし、情報隠蔽が『アフォのふりをすること』ってのが わかってない昨今のバカガキにうんざりってとこは確かにある。
業界なんか語りたがるのはいつだって素人だ
>>746 納期を守れない奴はアホの馬鹿だが邪魔でも迷惑でも無いが、
2chで下調べするようはアホの馬鹿は邪魔で迷惑だから去ってくれよ。
ビットマップファイルの特定座標(ピクセルではなくポイント!!)の色を取得するなんていう応用性のかけらも無いAPIが存在するわけ無いだろ。
>>736 LoadImage(NULL, pathAndName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
>>755 日本語が不自由な人は日本から去って韓国に去ってくれ。
ワラタ
>>746 だったら、その一発呼び出すだけで色が取れるというAPIを提示してみせろよ。
それができたらお前が正しいと認めてやるよ(w
但し納期に間に合うように見つけてこいよな
納期は7/22 の正午まで待ってやる
猫でもわかるプログラミング とやらで勉強しようと始めたんですけど 正直意味不明、これで十分分かり易いのでしょうか? サンプルも実行できないし…
>>763 ある程度わかってる人がみる所だとおもうが。
765 :
デフォルトの名無しさん :03/07/22 01:08
>>762 よーく読め。
まず、DIBファイルの解析がめんどいというレス。
>>733 これに対して、めんどいなら業界を辞めろというレス。
>>745 更にそのレスに対して、とにかく調べて無駄な事はしないべきだというレス。
>>746 めんどくさがって如何にして簡単に仕上げるかってのもプログラマの適正であって、
簡単だろうが何だろうが車輪の再発明やる奴はダメだという話だよね。
>もしもAPI一発呼び出すだけで色が取れたら?
と言ってるのは、そんな簡単なの書けよって意見に反対するための例だよね。
”もしも”って書いてるだろ、もしも既にあるのなら作り直すのは無駄だよね、と言ってる。
もしこうなら、って話の趣旨からズレた部分に対してツッコミを入れるというか
ナンクセ付ける
>>762 に乾杯♪
さぁ、君の論点ずらしも見破られたワケだが。
反省文なら7/22の朝まで待ってやる。
質問しまん。 GetWindowTextで取得した文字列「hogehoge」と char sv[]="hogehoge"; ↑は何が違うんですか?改行されてるんですか? その辺教えてください。 ちなみにえでぃっとぼっくす↓ hEWnd1 = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", (LPSTR)NULL, WS_OVERLAPPED | WS_CHILD | WS_VISIBLE | ES_LEFT | ES_WANTRETURN | ES_NOHIDESEL, 0, 0, 150, 25, hwnd, (HMENU)Edit1, g_hInstance, NULL);
どっかにテンプレなかったっけ?
ありえない仮定を持ち出す・・・とかいう奴。
しかも
> 下調べせずに無駄なコードばっかり書いて納期を守れない
>>745 が邪魔で仕方ない。
納期を守れない根拠もないし、無いとわかっているAPIを自分でコーディングするのは無駄でもない。
質問者として回答者を侮辱するのはどうかと思うよ。
しかもむしろ探し回る時間が無駄。
実際、733がこのスレで聞いて無駄に消費した時間があれば自分で書いたほうがましなのは言うまでも無い。
有りもしないAPIを探すより、そんな簡単なモノは自分でさっさと作ってしまった方が早いのだが。 少なくとも相当な馬鹿でない限りは、最初の質問をした時点から今の時間まででの間に、 余裕で目的を達成している。
要するに自分でAPIを探す能力もなければ、目的物を作成する能力もない それを指摘されて逆ギレ プログラムどころかどの業界にも向いていない
そんなAPIがあるわけないとわからない人は(プログラムを作るのは)難しい。
771 :
名無し@沢村 :03/07/22 01:25
つーか、ファイル読んでDIB構造体をメモリに作るコードは、 Webにいくつでも転がっている。 それをコピペで(w
>>766 誰にも相手にされず少しかわいそうなので答えるが。
ま っ た く 質 問 の 意 味 が わ か ら な い 。
国選エスパーを雇うか一般人にもわかる言葉で聞いてくれ。
775 :
名無し@沢村 :03/07/22 01:58
>>766 おまいはUNICODEビルドで開発してるんだろ。
だからGetWindowsText()で取得した文字列はchar型ではなく
wchar_t型の文字列なんだよ。
エスパー
あんまプログラマの適正がどうだとか(他には英語が読めないだろ、学歴無いだろなど)書かないで欲しいよ。 無駄なやり取り増えるから。
>>775 それにしては、
CreateWindowEx(..., "EDIT"...) が UNICODE になってないようだ。
なぞがなぞを呼ぶ・・・
Cスタイルの文字列を==演算子で比較していたに35カノッサ
780 :
デフォルトの名無しさん :03/07/22 03:12
781 名前:デフォルトの名無しさん :03/07/22 03:21
>>781 問題しかないが。
夏だなぁ・・・・・
785 :
デフォルトの名無しさん :03/07/22 12:53
質問です。 一度値の入った DDL のグローバル変数、およびグローバルな static 変数は、 どの時点で無効になりますか。
念のために言っておきますが DDLとはData Definition Laguageのことです。 Domain Definition Languageや Dynamic Declaration Languageでは ありません。
787 :
デフォルトの名無しさん :03/07/22 17:12
教えて頂きたいのですが、
>>785 はWin32APIと関係があるのでしょうか?
788 :
デフォルトの名無しさん :03/07/22 18:20
///////////////////////////////////////////////// 「夏厨が大量に沸いています」 したがってこのスレは8月いっぱい休止致します。 皆さんまた9月にお会いしましょう。 See you again /////////////////////////////////////////////////
さようなら、788さん(だけ)…
790 :
デフォルトの名無しさん :03/07/22 18:30
教えて頂きたいのですが、
>>787 って知障ですか?
785が暴れとる・・・
793 :
デフォルトの名無しさん :03/07/22 18:53
>>790 教えてあげよう。
知障なのはお前だ!
差別用語使うな。ヴォケ
794 :
デフォルトの名無しさん :03/07/22 18:58
すげー(゚σ ゚)ホジホジ
すげー(゚σ ゚)ホジホジ
すげー(゚σ ゚)ホジホジ 1
すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ
すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ
すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ
すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ すげー(゚σ ゚)ホジホジ
質問です〜。 ShowHtmlDialog(Ex) で frameset 使ったページを表示すると、 A タグの target属性を初めとして、兄弟フレームへのアクセスが 一切できないのは仕様ですか?
誰も785に回答しようとしないね。意地悪だね。
>>804 マジレスすると、Win32APIの質問じゃないから。
Win32APIとどう関係があるのか教えてくれたら回答してあげる。
>>805 そう思っているのはあなただけみたいですよ?
>>806 DDLってSQLで使う奴って事くらいしか知らないのですが、
Win32API(=Windowsのシステムコール)とどのような関係があるのか
良ければ教えてもらえますか?
あー、煽りじゃなくて、私はDDLを知らないので勉強の為に。
すいません DLL の間違いです。 Win32API とはちょっと範疇外れるけど Windows でのプログラミングということでお聞きしたかったんですが・・・ static やめました☆
釣りの相手はやめましょう。
要するに785!=786で、786は釣り師ってことか。
もう何が何やら・・・
815 :
デフォルトの名無しさん :03/07/22 21:01
LoadImage関数で、ビットマップの(100,100)から(200,200)を読み込ませる方法はありますか?
IPアドレス 218.123.72.69 ホスト名 YahooBB218123072069.bbtec.net
>>815 LoadImageのどこにそんなパラメータがありますか?(ピュア
818 :
デフォルトの名無しさん :03/07/22 21:30
>>817 0,0のやり方しか見たことないから、こういう場合はどうするのかなと思いまして
LoadImageした後に必要な部分を切り出す。
821 :
デフォルトの名無しさん :03/07/22 22:49
WindowsでCOMを使ったマルチスレッドのプログラミングをしているうちに、 ・スレッドとウィンドウ(メッセージキュー)の関係 ・ワーカースレッドと、UIスレッド ・モーダルダイアログとスレッド ・メッセージループとスレッド とかの関係が良く分からなくなってしまいました・・・。 ここら辺のトピックについて、解説しているサイト、書籍などはありませんでしょうか?
>>821 さらに
・COMオブジェクトとスレッド
に重要な関係があったような気がするのでそこも調べてみた方がいいと思う。
・・・詳しいサイトは知らん、ごめんよ。
gethostname()でFQDN形式で取得できるの。 またそれはどこから取得するの?
>>822 アパートの事?
すみません、COMってWin32APIの範疇に(ry
コメントありがとうございます。 822、824さま もちろん、アパートも問題なのですが、アパートについて調べるうちに、 そもそも、「自分は、スレッドとウィンドウの関係が分かっていない!」 ということに気づいたのです。 ウィンドウは、特定のスレッドの配下にいるらしいということは分かったのですが、 いかんせん複雑怪奇なWin32故、知識の整理ができません。 それで、ここらへんについて、説明をしているサイトや書籍を探している次第です。
826 :
デフォルトの名無しさん :03/07/23 00:37
>>820 「知的障害者」「知障」が差別用語だとすると、正しくはなんて呼べばいいのでしょうか?
知恵遅れ
厨
831 :
デフォルトの名無しさん :03/07/23 01:16
>>821 ,825
>ウィンドウは、特定のスレッドの配下にいるらしいということは分かったのですが、
ここでかなーり勘違いしてるっぽい。
#オレも昔はそんな風に勘違いしてた
きちんと解説しているサイトや書籍は知らないが…
まずはみっちりシングルスレッドの普通のWin32アプリについて勉強すること!
メッセージループってのは要するに「GetMessageしてDispatchMessage」
を延々と繰り返してるだけなんだが、この二つの関数が何をやってるのか
把握しさえすればなんとかなる。分かってしまえば「なーんだ」って感じ。
>>832 「TranslateMessage」は何でふか?
飾りだよ
かざりじゃないのよ涙は…
某サイトのリソーススクリプトを使ってビットマップを表示するサンプルを試したいのですが 画像が表示されません リソーススクリプトの組み込みって具体的にどうやるんでしょうか? 使ってるのはMicrosoft Visual C++ 6.0です
>>832 どう勘違いなんだ?
ウィンドウは作成したスレッドに属していると思うが。
特に分からないのが、 同一のスレッドにモーダルウィンドウがあるときの動作です。 モーダルウィンドウを出すと、親ウィンドウのメッセージプロシージャは実行されない? メッセージボックスでは???
親WindowがDoModal関数を呼んだら、そのモーダルウィンドウが閉じられるまで 制御は戻らないよね?
832 の言う通りか。 スレッド以前にイベントドリブンを勉強したほうが良いな。
>833 >「TranslateMessage」は何でふか? キーボートからの入力をキーボードの状態に応じて(WM_CHAR用に)変換するだけ。 メッセージを利用してキーボードの入力を処理しなければ関係ない。
PostThreadMessageわ〜?
843 :
デフォルトの名無しさん :03/07/23 12:28
ウインドウの右上にある最大化ボタンを押して最大化したあと もう1度押すと最大化が解除されますよね? このときに再描画の処理を行いたいのですが、どんなメッセージが送られて きているのでしょうか? WM_PAINTもWM_GETMINMAXINFOも飛んできません。
失礼しました。OSはWindows2000です。
WM_SIZEじゃねーの?
↓責任重大
>>846 ちゃんとSpy++で確認した?
今OpenJaneで試してみたけど、ちゃんとWM_SIZE飛んできてたよ。
無限ループに陥った
>>846 VC付属ツールのSPY++使って、
メッセージ拾ってみるとかしてみそ?
>>843 WM_SHOWWINDOWにSW_OTHERUNNZOOMが乗っかってくる。
852 :
デフォルトの名無しさん :03/07/23 21:01
特定のレジストリキーに入ってる値とタイトル?を取得するために RegEnumValueを使いたいのですが…MSDNを見てもよくわかりません(TT んで,いろいろやってみたのですがうまくいかないのです… どなたかデーターの値とタイトルを列挙するサンプルあげてくれませぬか… おねがいいたします
853 :
デフォルトの名無しさん :03/07/23 21:04
>>852 つか、MSDN読んでもワカランのなら適性無いから転職しろ。
855 :
デフォルトの名無しさん :03/07/23 21:36
ビットマップ画像ファイル(またはicoファイル)を読み込んで アイコンハンドルを取得する関数ってありますか? または、サンプルソースがある場所を教えていただければ幸いです よろしくお願いします
856 :
デフォルトの名無しさん :03/07/23 21:38
また適正厨かよ・・・
859 :
デフォルトの名無しさん :03/07/23 22:01
CreateThread で取得したハンドルは CloseHandle で閉じるんだよね?
861 :
デフォルトの名無しさん :03/07/23 23:25
MsgWaitForMultipleObjectsって WaitForMultipleObjectsと同じように待って、 その間にメッセージがきたら WndProcを呼んでメッセージを処理してくれる関数なの?
>>855 CreateIcon()
CreateIconIndirect()
CreateIconFromResource()
などを検索。
ビットマップのバイナリデータを扱えないと難しいね。
>>861 メッセージが来た時の対応はPeekMessageと同じ。
IsDialogMessageしてTranslateAcceleratorして
TranslateMessage通してDispatchMessageしてやらなくちゃだめぽ
>>837-840 う!?ああそうか、そう読むと832の段階では早とちりだった。
「各ウィンドウが個別のスレッドに属している」と
>>821 氏が
勘違いしていると思ったのだが、やっぱりそうであったか。
VisualC++使ってるなら
DispatchMessageの呼び出しとWindowProcの先頭、
DoModalの呼び出しの直前と直後あたりにブレークポイントを
置いてデバッガ上で動かしてみて、
コールスタック(呼び出し履歴)を見てみると面白いかも。
一つのスレッドに一つ以上のウィンドウが属している、であってますか?
他ウィンドウに対してキー情報を送る場合、 SendMessage(PostMessage)でWM_KEYDOWN、WM_CHARを使う SendInput(keybd_event)を使う これ以外の方法はありますか?
外部物理デバイスに、「キーを押せ」と指令を出す
868 :
デフォルトの名無しさん :03/07/24 11:27
>>866 漏れならキーが押されたときに発生するメッセージを直接送信する。
PostMessage(l_hDialog, WM_COMMAND, MAKELONG(GetDlgCtrlID(l_hButton), BN_CLICKED), l_hButton);
869 :
デフォルトの名無しさん :03/07/24 11:29
>>868 MAKEWPARAM
(LPARAM)
872 :
デフォルトの名無しさん :03/07/24 22:47
助けて!waveInResetがフリーズする! 音声認識処理を組み込んだActiveXコントロールを作ってるけど、 ウェーブフォームオーディオ入力デバイスを閉じようとすると フリーズしちゃう! waveInStop→waveInReset→waveInUnPrepareHeader→waveInClose の順で閉じてるけど、waveInStopは0を返してる。それまでの Openとかは問題なし。 ぐぐってみたけど、こんな症例はどこにもない。 だれか助けて!お願い!
>>865 あってる。大抵のプログラムでは全てのウィンドウが
メインスレッドに属してる。
「属する」って言い方もナンだが、そのスレッドのメッセージループの
配下で各ウィンドウのウィンドウプロシージャが動いてる。
874 :
デフォルトの名無しさん :03/07/25 10:31
>>871 添削ありがとう。
そんな小洒落たAPIがあったんだね。
今後はそっちを使わせてもらうよ。
>>874 MAKELPARAM,MAKEWPARAMは単なるマクロです
876 :
デフォルトの名無しさん :03/07/25 11:31
>>875 ありがとう。
ここはソフト開発の本質が学べるね。
まー、細かいことをいうなら
>>868 のコードは実際にはPascalなので
マクロでもAPIでもなくDelphiの単なるライブラリ関数なわけだが。
>>873 属するっていう言い方で良いんじゃない?実際に各ウィンドウは、
Create されたスレッドに属していて、
・そのウィンドウに関するメッセージは、そのウィンドウが属するスレッドの
メッセージキューに加えられる。
・別のスレッドからSendMessage されると、スレッド間通信が行われて、
WindowProc はウィンドウが属するスレッドで実行される。
てな動作になります。
後者のようなスレッド間通信は、COM コンポーネントがアパートを超えて
メソッド呼び出しされる場合なんかにも使われる仕組みです。
面白いのは、こうしたスレッド間呼び出しで呼び出し元スレッドがブロック
している間にも、他スレッドからの呼び出しには応じられるということ。
STA の COM コンポーネント A, B があって、 A が B->hoge() を呼び出して
一見ブロックしていても、その間に B からの A->hage() なんかにはちゃんと
応じてくれます。
面白くないのは COM のスレッド間通信でタイムアウトを明示する簡単な方法
が無さそうなこと。。。
別スレッドのウインドウに親子関係を持たせると、 不安定になってなかなか楽しい とくに標準コントロールの部類
プログラム2:10進数の整数の桁数を表示する
>>872 CALLBACK をどうやってるかが気になるが。
CALLBACK_FUNCTION で waveInOpen を呼び出していて、
callback 関数の中でデッドロックしてるとかじゃないよね?
882 :
デフォルトの名無しさん :03/07/25 19:54
もしかしたら、C++スレかもしれませんがそうだった場合ごめんなさい SECURITY_ATTRIBUTES構造体って使っていますか? もし使っているならば、どういうときに使っていますか?
>>875 関数だけがAPIではない。
マクロだって立派なAPI
>>882 サービスとログオンユーザーでカーネルオブジェクトを共有する必要があるときとか
885 :
デフォルトの名無しさん :03/07/25 21:34
>881 CALLBACK関数waveInProcではWIM_OPEN,WIM_CLOSE,WIM_DATAの 切り分けをして、OnWimData(もともと単体動作のものを流用) を呼び出しているだけです。 呼び出しも、グローバルでCOleControlのポインタを持たせて おいて->OnWimOpenを実行するだけで、デッドロックするよう な要素が見当たりません。(><)
あー俺 waveInStop って使ったこと無かった。 終了時は waveInReset しか呼んでないよ。
>>882 インストーラから呼び出すDLLで一部のファイルを制限ユーザでも更新させるために、
ファイルのパーミッションを変更したいとか、
レジストリの一部のキーを制限ユーザで更新させたいとか。
とにかく既存のアプリを無理やり XP ロゴに適用させようと悪さする時かな(w
889 :
デフォルトの名無しさん :03/07/27 01:49
質問させていただきます。 エディットボックスを任意に「無効」にしたいのですが、EM_の中にそれらしきものが発見できません EM_SETREADONLYをとりあえず使っているのですが、 フォーカスをあわせられるのがちょっと困り者です 「無効」にするメッセージはないでしょうか?
EnableWindow
EnableWindow() は目的と違う?
(゚д゚) EM_メッセージを使うという先入観に捕らわれてました 灯台下暗し。ありがとうございました
893 :
デフォルトの名無しさん :03/07/27 11:02
こんにちは。質問があります。 すでに画面上に表示されているフォームがあるのですが、 固定サイズになっていてサイズ変更や最大化が出来ない状態です。 これを可能にするにはどうしたらよいのでしょうか? ちなみに左上のコントロールボックスの「サイズ変更」と「最大化」は 共にグレーアウトされています。
>>893 開発環境を書こう。
つーか、たぶんそこはかとなくスレ違い。
>>893 hWndを取得して、ウインドウのモードを書き換えてしまえばOKだと思われる
hWndを取得する方法としては、
タイトルバーの文字で一致を探すとか、対象座標で一番上にあるウインドウのhWndをとるとか
色々ある
>>893 開発環境はVCもしくはVBです。
APIで変更できた記憶があったのでこちらで質問しました。
>>895 ハンドルは取得できています。
その後のウィンドウのモードを書き換えるにはどうしたらよいのでしょうか?
>>898 レスありがとうございます。
さっそく、教えていただいたサイトを参考に組んでみました。
VBで書いたのですが
Dim h As Long
h = FindWindow("foo", vbNullString)
Call SetWindowLong(h, GWL_STYLE, WS_THICKFRAME)
Call SetWindowPos(h, 0, 0, 0, 0, 0, SWP_FRAMECHANGED)
以上のようなコードを実行するとウィンドウそのものが消えてしまいました。
タスクバーにはアイコンが残っていますがコンテキストメニューは出ません。
ただ実行はされているようです。
間違っている点があったら指摘していただけますでしょうか。
>>899 > 間違っている点があったら指摘していただけますでしょうか。
嫌だね。
>>900 了解しました。
いろいろ教えてくださってありがとうございました。
>>899 GetしてからちょこっといじってSetせよ
>>899 元のスタイルを考慮しなければそうなるだろ
SetWindowPosのフラグも何個か足りないような
getしたウィンドウスタイルに新たに追加する場合には or 演算子を使いますが あるスタイルだけ削除したり、あるスタイルが適用されているかどうかを 判断するにはどうしたらよいのでしょうか?
判定:if(style&&WS_FOO) 削除:style&&~WS_FOO
何故&二回・・・
&でescapeする言語なの加奈?
ここからは
>>906 の使っている言語を当てるスレになりました
>>906 判定 (style and WS_FOO) > 0
削除 style = style not WS_FOO
ということでしょうか?
>style = style not WS_FOO なんすかそれ。notて二項演算子? style = style and not WS_FOO
判定後なら xor でもよし
914 :
デフォルトの名無しさん :03/07/28 20:49
EXEファイルの最後に別データを埋め込んで取り出す、という 自己解凍書庫のようなことをやりたいのですが WindowsのEXEファイルのファイルサイズ(EXE部分)を取得するにはどうすれば良いでしょうか? 取得しないとデータの取り出しが出来ないので(汗 DOSであれば 02〜03H 最後のページに入っているバイト数 04〜05H 512バイト単位のファイルの大きさ(ヘッダも含む)。 らしいのですが、Windows上で動く32bitEXEの場合 常に同じ値になってしまいファイルサイズが取得出来ません。 ちなみにWin32コンソールアプリケーションで作成しています。
915 :
名無し@沢村 :03/07/28 21:14
そういうプログラムはウィルスとみなされる昨今。
HSPはウィルスか? 詳しく知らんがアレも似たようなことしてそうだけど
>>914 データ部にヘッダか何かつけて、それで判別ってのはダメ?
922 :
デフォルトの名無しさん :03/07/28 23:29
現在特殊な用紙に印刷をしています(プリンタの設定で新しく定義した用紙) で、その新しい名称と番号は別々にAPIで取得できるんだけど、その両者を結びつけてコンボなりリストなりから選択できるようにしたいんですが・・・ 現在は定義した用紙の登録前後で定義の番号を取得し、その前後で違うのがあれば、それをINIファイルに書き込むようにしています。 ↓ 登録前 登録後 12 12 22 22 33 で、調べたあとで33をINIファイに書き込んで使用 さて・・・出来るんだろうか・・・ VB6 & Win2000です
何が聞きたいのかわからん。
要はAPIで現在登録してある用紙を取得設定できませんか?って事です 説明下手でごめんなさい(__)
925 :
無料動画直リン :03/07/28 23:38
普通にDeviceCapabilitiesで列挙できるけど。
>>920 HSPはデータにヘッダみたいのがついてたからそれで判別してたっぽい。
逆汗して確かめたわけじゃないから断定はできないけど
929 :
デフォルトの名無しさん :03/07/29 01:43
C++でnew と delete を繰り返していると、タスクマネージャーで見ると 2Gバイトまで500Mバイト以上空きがあるのに、1Mバイトの塊も取得 できなくなった。 ガーベージコレクタみたいなものってあるの? ちなみに、Windows2000
>new と delete を繰り返していると、 繰り返してないからメモリが足りなくなるんじゃないの。 GCよりもリークのチェックツールでdeleteし忘れを検出してみたら。
deleteしたからといってOSにメモリを返すとは限らないわけだが。 メモリ空間が断片化しまくって連続した1MBの領域が存在しなくなったんだろ。
>>928 914さんとは別人ですが、そのサンプルって問題ないんですか?
オプションヘッダのサイズを固定値にしてるし、最後のセクションヘッダが
ファイルの末尾のデータを指していると仮定しているし…。
文句つけているわけじゃなくて、ちょうどEXEを編集・作成するようなライブラリでも
作ろーかなーとか何となく思ってPEフォーマット勉強中なのですが、
そういう一般的な約束があるんなら気をつけなきゃな、と思ったので。
あと、
>>914 は、単純にファイルの末尾に「データ」+「データ長情報」を加えて、
ファイル末尾のデータ長情報を読んでからデータ位置を逆算すれば簡単だと思うのですが…。
>>933 それって簡単にできるもんなの?
漏れには想像もつかないんだが。
コンパイル時に全て作成するならリソースでもいいけど、
自己解凍みたいなものは、実行モジュールが予めあって、
それに圧縮したファイルを結合するわけから、
リソースとして格納するとなると、それこそフォーマット解析して
いじくって組み込む……ってことになるような気がするんだけど。
UpdateResource
>>934 解凍するモジュールはコンパイル時に作成されるんだから、結合前に圧縮対象の
モジュールを圧縮して.rc2にでもinclude書いておけばいいんじゃねえの。
解凍モジュール側のプロジェクトに圧縮対象のモジュールへの依存関係張って
カスタムビルドで圧縮、.rc2でinclude。
皆さんレスありがとうございました^^ 別ファイルを追加する際に実行部分の最後にヘッダをつけて それ以降をデータ部として、実行時に自身のバイナリからヘッダ部分を スキャンした後でデータを取り出すということに成功しました。 今はもう少し改良を加えて複数のファイルの追加、及びDLL等のパッキング が出来ないかどうかを考え中です。
一番最後に「データを負荷する前のファイルサイズ」を付けとけば、複数追加しても 後ろから芋づる式に取り出せるよ。
940 :
デフォルトの名無しさん :03/07/29 19:37
ユーザ領域内にファイルをインストールする必要のあるツールを開発していて、パスの取得(w2kだとc:\Documents and Settings\hogehoge.network以下みたいな感じ)のためにPlatform SDKのGetUserProfileDirectory()を使おうと思ってます。 が、MSDNのサイトを見てもぐぐっても必要とされるuserenv.lib/hのことについては情報がなく、自分のマシン(w2k+VisualStudio6.0SP3)にも入っていないため困ってます。 米MSDNにはSDKのCD買えやとか書いてあるんですが、それ以外にどこかで落とせないんでしょうか? 今週中には修正しないといけないため、時間がなくてとても取り寄せてる時間もないっす(´Д`)
941 :
デフォルトの名無しさん :03/07/29 20:50
>>940 MSDNサブスクライバダウンロードはつかえないのけ?
それ以前に、SDKって普通にダウンロードできなかったっけ?
943 :
デフォルトの名無しさん :03/07/29 21:04
もはや馬鹿でかいとは感じなくなったな。
>>935 NT系のみ
まあMeのサポートが切れたらそれもありかな
945 :
デフォルトの名無しさん :03/07/30 07:03
WinAPIのみでODBCアクセスしたいのですが参考になるサイトありませんでしょうか?
>>940 引数と関数名が分かってるなら、
ヘッダファイルは自作、
ライブラリはDLLを動的に呼び出せばいいと言ってみるてすつ
userenv.h BOOL WINAPI GetUserProfileDirectoryA(HANDLE hToken, LPSTR lpProfileDir,LPDWORD lpcchSize); BOOL WINAPI GetUserProfileDirectoryW(HANDLE hToken, LPWSTR lpProfileDir,LPDWORD lpcchSize); userenv.def LIBRARY USERENV.dll EXPORTS _GetUserProfileDirectoryA@12 _GetUserProfileDirectoryW@12 みたいにdefファイルからlib生成すればいいんでないか?
ピクチャコントロールにラインを描画して、そのラインをマウスクリック で捕まえて,マウスドラッグで移動させたいんですが、 ラインの描画にはどの関数を使えばよいのでしょうか。 ただラインを描くだけだとアニメーションさせにくいと思うのですが。。。
>>948 MoveTo
LineTo
VB厨か?
950 :
デフォルトの名無しさん :03/07/30 10:07
>>948 そりゃ普通にMoveTo()、LineTo()じゃないのか?
951 :
デフォルトの名無しさん :03/07/30 10:07
イヤンかぶった。
>>949 ,950
ありがとうございます。
やってみます。
どうにかSDKのダウソサイトハケーンしますた。 最新版で500Mらしい・・・(´Д`;) あと、DLLを呼び出すライブラリの作り方は非常に参考になりました。 ありがとうございました。
955 :
デフォルトの名無しさん :03/07/30 16:07
>>953 ゴメン。できない。>953可能ならヨロ。
957 :
デフォルトの名無しさん :03/07/30 18:55
958 :
デフォルトの名無しさん :03/07/30 21:28
>>958 さんきゅーさー
面倒そうなのでMFCのほうを使うことにしました。
参考になりました。
960 :
デフォルトの名無しさん :03/08/01 00:26
非MFCのGUIアプリから、MFC DLLを呼び出す方法ってない? おしえてください。
MFCなCOMのEXEでも経由すれば?
MFC.DLL の何を呼び出すんだ?
普通にできるよ。
964 :
デフォルトの名無しさん :03/08/01 23:34
標準DLLにして、おまじないを唱えたら大丈夫でした。 ども。
(^^)
ドロップダウンリストで初期状態ではリストの中にない文字列を表示して おきたいんですけど、それってサブクラス化しないで出来ます? ユーザからは編集不可のコンボボックスって感じです。
出来る。
どうやればできます? ドロップダウンリストにしちゃうと、SetWindowTextとかやっても 何も表示してくれないんですけど。
ドロップダウンリストじゃ無理でしょ。 リスト中にないと。
できました。ありがとうございました。
オーナードローすればいーんじゃないの?無理かな?
972 :
デフォルトの名無しさん :03/08/06 22:26
972
973 :
デフォルトの名無しさん :03/08/07 10:31
埋め
974 :
デフォルトの名無しさん :03/08/07 10:40
梅
975 :
デフォルトの名無しさん :03/08/07 11:53
楳
977 :
デフォルトの名無しさん :03/08/07 13:10
生め
979 :
デフォルトの名無しさん :03/08/07 13:19
宇目
980 :
デフォルトの名無しさん :03/08/07 13:57
産め
梅図
982 :
デフォルトの名無しさん :03/08/07 14:56
膿め
藻前ら、スレの埋め立てでageるなよ
age
んじゃ 1000までWin32APIで「しりとり」でもしようかのう。 CreateWindowEx →
987 :
デフォルトの名無しさん :03/08/07 16:01
XcvOpenPort() ->
988 :
デフォルトの名無しさん :03/08/07 16:02
TextOut ->
989 :
デフォルトの名無しさん :03/08/07 16:03
tapiGetLocationInfo() ->
XactAttributeEnum
991 :
デフォルトの名無しさん :03/08/07 16:06
OEMDeviceCapabilities() ->
すまん。 OpenDesktop→
OpenPeinter
盛大にケコーン
>>992 から
ScrollConsoleScreenBuffer
RpcAsyncInitializeHandle() ->
EnumWindows() ->
SendMessageCallback() ->
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。