■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build24
1 名前:デフォルトの名無しさん :04/10/28 21:38:55
- 過去スレ
Build23:http://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:http://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:http://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:http://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:http://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやー ごめんなさい。」に巻き込まれた模様

2 名前:デフォルトの名無しさん :04/10/28 21:40:03
- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
WIN32 Programming
http://www7.plala.or.jp/keny01/win32/
Win32 SDK Programming
http://www7.plala.or.jp/keny01/windows/win32/

3 名前:デフォルトの名無しさん :04/10/28 21:43:04
ぐぁっ、前スレの人と同じミスを…スマソ
あれだけ確認したのにな

4 名前:デフォルトの名無しさん :04/10/28 21:46:17
いや違うな、前々スレで抜けたのか
次スレ立てる人はこれでお願い

- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/

5 名前:デフォルトの名無しさん :04/10/28 22:55:20
前スレの終わり方はあれでよかったのか?

6 名前:デフォルトの名無しさん :04/10/28 23:19:17
アバウトな質問ですみませんが、
XP pro でイベントビューアを見ると

エラー発生アプリケーション 私のアプリケーション.exe、バージョン 1.0.1.4、
エラー発生モジュール ntdll.dll、バージョン 5.1.2600.1217、エラー発生アドレス 0x00008e22

というログを残すエラーが発生しました。
RtlFreeHeap のエントリポイントが近いので、RtlFreeHeap が怪しいと思います。

8月から10月の間で2台のパソコンで各1回ずつ発生しました。
私のアプリケーションは1〜2週間は連続稼動しています。
同じような現象で悩んだ方がいましたら、何かヒントを教えて頂けませんか?


7 名前:デフォルトの名無しさん :04/10/28 23:42:58
> 989 名前:デフォルトの名無しさん 投稿日:04/10/28 21:32:33
> >>987
> デザインの話じゃねぇの?

> もし一部のメニューが非表示になる機能だったら
> 絶対に止めとけ。使いにくくてしょうがない

個人の意見を押しつけるのはやめて下さい


8 名前:デフォルトの名無しさん :04/10/28 23:46:52
絶対に止めとけ。使いにくくてしょうがない

9 名前:デフォルトの名無しさん :04/10/28 23:50:52
絶対に便利。実装してチョ。

10 名前:デフォルトの名無しさん :04/10/28 23:51:01
グレー表示ってさ、ユーザにとっては極め付けの冷たいインターフェイスなんだよな・・・
2000でやってたアレも同系

11 名前:デフォルトの名無しさん :04/10/28 23:57:46
>>5
ワラタ

12 名前:デフォルトの名無しさん :04/10/29 00:03:06
>>10
なんのことかサッパリ解らん。

13 名前:デフォルトの名無しさん :04/10/29 00:35:18
モードレスダイアログでEnterを押して実行されるように
標準のボタンを作りたいのですが、やっぱり出来ません。
モードレスダイアログではリソースエディタで”標準のボタン”を
指定するだけで出来ました。


CreateWindowで親ウインドウを作成

CreateDialogで親ウインドウにダイアログを貼り付ける

親ウインドウのプロシージャ
switch(msg)
{
//hWndDlgはダイアログのハンドル
case WM_SETFOCUS:
SetFocus (hWndDlg);
break;

メッセージループ
while (GetMessage (&msg,NULL,0,0))
{
if (hWndDlg && IsDialogMessage (hWndDlg,&msg))
{
continue;
}
TranslateMessage (&msg);
DispatchMessage (&msg);
}


14 名前:デフォルトの名無しさん :04/10/29 01:09:04
LoadImageのLR_LOADMAP3DCOLORSって、確かリソースが
インデックスカラー値じゃないと使えないよね?

最近のウィンドウズのデフォルト色は、まず間違いなくインデックスカラー値から
外れてくるから、LR_LOADMAP3DCOLORSは使えない気がするんだけどどうだろう。

15 名前:デフォルトの名無しさん :04/10/29 02:30:13
>>14
何か勘違いしている。

16 名前:デフォルトの名無しさん :04/10/29 09:19:23
>>15
俺の勘違いかな。色を変えるというかパレットを変えるイメージだったのだが。
と思って今軽く試してみたけど、やはり出来ない気がする。時間が無くて適当でごめん。

17 名前:デフォルトの名無しさん :04/10/29 17:01:14
>モードレスダイアログではリソースエディタで”標準のボタン”を
>指定するだけで出来ました。

じゃ、問題なしだな

18 名前:デフォルトの名無しさん :04/10/29 17:05:57
すみません。
SHChangeNotifyRegisterのことで質問があるのですが、どなたかお答え
いただけますか?

19 名前:デフォルトの名無しさん :04/10/29 17:27:11
質問を言ってくれないと答えられない。

20 名前:18 :04/10/29 18:18:31
環境はWinXP SP1,VC++ SP5で、最新のMS SDKへのパスを通してます。

SHChangeNotifyRegisterの起動時に、以下のパラメータを指定します。
第2引数:0x0001 | 0x0002(ファイル及びシェルからの通知を指定)
第3引数:SHCNE_ALLEVENTS(全てのイベントを受信)
この状態で、イベントの一つであるSHCNE_CREATE(アイテムの作成)を
受信したいとき、アプリケーションを起動して「ファイルを保存」から
ファイルを作成したときには受信しません。
右クリックで、「新規作成」から新規ファイルを作成したときには、受信します。

質問は、アプリケーションを起動して「ファイルを保存」からファイルを
作成したときに、どうやったらSHCNE_CREATEを受信できるかです。

21 名前:デフォルトの名無しさん :04/10/29 23:38:56
DIBとDDBの違いがよう分からんのですけど。

22 名前:デフォルトの名無しさん :04/10/30 00:04:05
質問です。
下のようなダブルバッファリングするようなプログラムを作ったのですが、どうもうまくいきません
いろいろやってみたのですがよくわかりません。
どうすれば、うまく動くようになるでしょうか?

症状 : うまく転送されていない、とおもう。(色を指定してもメッシュがかかったような白黒になる、白、黒はうまくいった)
プログラム :
//省略
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDc = BeginPaint( hWnd , &ps );
HDC hbDc = CreateCompatibleDC( hDc );
HBITMAP hBitmap = CreateCompatibleBitmap( hbDc , 640 , 480 );
HBITMAP hOldBitmap = SelectObject( hbDc , hBitmap );
{
HBRUSH hBrush = CreateSolidBrush( RGB( 100 , 0 , 100 ) );
SelectObject( hbDc , hBrush );
PatBlt( hbDc , 0 , 0 , 640 , 480 , PATCOPY );
DeleteObject( SelectObject( hbDc , GetStockObject( WHITE_BRUSH ) ) );
}
SelectObject( hbDc , GetStockObject( BLACK_BRUSH ) );
Rectangle( hbDc , x , y , x + 100 , y + 100 );
BitBlt( hDc , 0 , 0 , 640 , 480 , hbDc , 0 , 0 , SRCCOPY );
DeleteObject( SelectObject( hbDc , hOldBitmap ) );
DeleteDC( hbDc );
EndPaint( hWnd , &ps );
break;
}
//省略
きゃらの座標(x,y)更新後、InvalidateRect( hWnd , NULL , FALSE)としてWM_PAINTメッセージを発生させています。

23 名前:デフォルトの名無しさん :04/10/30 00:21:06
createcompatiblebm( hDc

24 名前:デフォルトの名無しさん :04/10/30 00:53:34
ありがとうございました、おかげで解決できました。
よく見るとAPIのヘルプに書いてありましたね。
見逃していました。

ほんとにありがとうございました。

25 名前:デフォルトの名無しさん :04/10/30 01:19:45
>>22
よくコード見て無いけど、SetMapMode(hDC,MM_TEXT);とかモード設定してみ
あと、コードの途中の{}は何だ?

26 名前:デフォルトの名無しさん :04/10/30 01:44:26
>>20
以前SHChangeNotifyRegister()を使ったところ、あまり当てにならなかった記憶がある。
ReadDirectoryChangesW()の方がお奨め。

27 名前:デフォルトの名無しさん :04/10/30 10:39:51
NT系専用だけどな
まあそろそろ9xは切り捨ててもいいか

28 名前:18 :04/10/30 10:42:25
>>26
ReadDirectoryChangesWについて質問していいですか?
ファイル数やディレクトリ数のエントリ数が多数で、ディレクトリの階層が深い
場所(例:OSの入っているドライブ)をルートから監視するとき、
ReadDirectoryChangesWを起動している間のパソコンのパフォーマンスは
悪くなりますか?

29 名前:デフォルトの名無しさん :04/10/30 10:55:06
>>28
自分で試せよ

30 名前:デフォルトの名無しさん :04/10/30 10:57:52
Winn2000以降とかでいいんだけど、現在のプロセスだけじゃなくて、
システムのプロパティから見れる環境変数を変える事って出来ない?
インストーラーとかが時々やってるけど…。


31 名前:デフォルトの名無しさん :04/10/30 11:16:33
http://www.kt.rim.or.jp/~yuta/prog/win32/Registry/renv/index.html

32 名前:13 :04/10/30 12:00:42
>>17
すいません。
モーダルダイアログの間違いです。
モードレスダイアログでは出来ないのです。

どうすればいいのでしょうか?

33 名前:デフォルトの名無しさん :04/10/30 12:58:43
CreateThreadに引数を渡そうと思ってます。各スレッドに0,1,2という引数をそれぞれ渡したいのですがなぜかすべてのスレッドに3が渡されています。
ポインタがらみだと思うのですがどう書けばうまくいくのかわかりません。アドバイスお願いします。



34 名前:デフォルトの名無しさん :04/10/30 12:59:32
書いたプログラムです。

#include <stdio.h>
#include <windows.h>

DWORD WINAPI Testthread(LPVOID);

int main() {
  int i;
  HANDLE hTh[3];
  DWORD tid[3];

  for (i=0; i<3; i++) {
     /* スレッドを作成 */
     hTh[i] = CreateThread(NULL,0,Testthread,(LPVOID)&i,0,&tid[i]);
}

  WaitForMultipleObjects(3, hTh, TRUE, INFINITE);

  for (i=0; i<3; i++) {
  CloseHandle(hTh[i]);
  }

  return 0;
}

DWORD WINAPI Testthread(LPVOID lpx) {
  int num = *((int *)lpx);
  printf("%d\n", num);
  return 0;
}

35 名前:デフォルトの名無しさん :04/10/30 13:03:29
>>33
hTh[i] = CreateThread(NULL,0,Testthread,(LPVOID)i,0,&tid[i]);

int num = (int)lpx;

36 名前:デフォルトの名無しさん :04/10/30 13:09:04
>>35
アドバイスありがとうございます。その方法でできました。
なぜそれでできるのかまだわからないですが・・・void*型調べてみます。

37 名前:デフォルトの名無しさん :04/10/30 13:37:47
>>36
CreateThread() した瞬間に作ったスレッドが走り出すとは限らない。
CreateThread() が3回呼ばれた後にそれぞれのスレッドが動き始めるん
だろう。


38 名前:デフォルトの名無しさん :04/10/30 16:24:51
画面上にある全てのウィンドウを半透明化した後、
透明度を255にして元に戻したのですが、
前よりかなり重くなりました。
何かマズいことをしたのでしょうか?

39 名前:デフォルトの名無しさん :04/10/30 16:34:47
>>38
WS_EX_LAYEREDを外せ

40 名前:38 :04/10/30 17:02:48
>>39
ありがとうございます。

41 名前:38 :04/10/30 17:25:07
すいません。
ここに書かれているやり方でWS_EX_STYLEを外そうとしたのですが、
適用したウィンドウの全ての内容が左右反転してしまいました。
ttp://hitokuso.kicks-ass.org/progtips.html
しかもとてつもなく重いです。

LONG my_style;
my_style=GetWindowLong(hWnd,GWL_EXSTYLE);
my_style&=~WS_EX_LAYERED;
SetWindowLong(hWnd,GWL_EXSTYLE,my_style);

42 名前:38 :04/10/30 17:32:46
すいません、なおりました。
一部 GWL_STYLE と書き間違えていたのが問題だったようです。
焦って混乱してましたが、解決しました。
お騒がせしました。

43 名前:デフォルトの名無しさん :04/10/30 18:11:58
>>34 >>36
#include <stdio.h>
#include <windows.h>

DWORD WINAPI Testthread(LPVOID);

int main() {
  int i, d[3];
  HANDLE hTh[3];
  DWORD tid[3];

  for (i=0; i<3; i++) {
     /* スレッドを作成 */
     d[i] = i;
     hTh[i] = CreateThread(NULL,0,Testthread,(LPVOID)&d[i],0,&tid[i]);
}
  WaitForMultipleObjects(3, hTh, TRUE, INFINITE);
  for (i=0; i<3; i++) {
  CloseHandle(hTh[i]);
  }
  return 0;
}

DWORD WINAPI Testthread(LPVOID lpx) {
  int num = *((int *)lpx);
  printf("%d\n", num);
  return 0;
}

>>35 は場当たり的な回答だから真似するな

44 名前:デフォルトの名無しさん :04/10/30 18:29:30
>>43
32bit環境ならintもポインタも4byteだから
単一の値を渡すだけなら>>35は常套手段だと思うけど。

45 名前:デフォルトの名無しさん :04/10/30 23:32:26
他アプリのステータスバーの文字列を取得したいのですが、
SB_GETTEXTでは他アプリのステータスバーには無効らしくうまくいきません。
ググっていると共有メモリを使うとよい、という話も有るようなのですがさっぱりわかりません。
何か簡単な方法はないものでしょうか?

46 名前:デフォルトの名無しさん :04/10/31 00:41:30
>>45
他アプリというのは自分でつくったアプリ?

47 名前:デフォルトの名無しさん :04/10/31 00:53:15
>>46
違います。

48 名前:デフォルトの名無しさん :04/10/31 01:21:58
なら共有メモリを使うだけじゃ無理じゃないかな。

俺が思いつくのは、
1. 自作のDLLをそのアプリに注入する (SetWindowsHookEx)
2. そのDLLはSB_GETEXTでステータスバーの文字列を取得する
3. 共有メモリを使って (WM_COPYDATAとかでもいいけど)
  DLLから自作アプリに文字列を渡す

もっといい方法があるかもしれないので参考までに。

49 名前:デフォルトの名無しさん :04/10/31 04:47:31
WriteConsole()で出力しようと思ってGetStdHandle(STD_OUTPUT_HANDLE)で
標準出力のハンドルを取得して、使い終わってもCloseHandle()などで閉じる必要は
無いんでしょうか?

というか何度もその都度GetStdHandle(STD_OUTPUT_HANDLE)で取得しても良いんでしょうか?

void hoge() {
HANDLE out;
DWORD num;
out = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsole(out, "aaa", 3, &num, NULL);
//CloseHandle(out); //<=これをすると2回目以降出力されなくなる
}

int main() {
hoge(); hoge();
}


50 名前:デフォルトの名無しさん :04/10/31 05:01:35
>>49

51 名前:デフォルトの名無しさん :04/10/31 07:10:33
>>50

52 名前:デフォルトの名無しさん :04/10/31 07:16:09
>>49
GetStdHandleはCloseHandleするな。
何度もGetStdHandleするのが気になるなら、静的変数なんかにしろ。

53 名前:デフォルトの名無しさん :04/10/31 19:25:47
任意のプログラムのファイル入出力を
監視するツールを作りたいのですが、上手く行きません。

他プロセスの入出力を監視するには、
CreateFileやRead/WriteFileをフックすれば良いと思い、
Kernel32.dllのラッパーを作成しようとしているのですが、
明示的リンクを行うためのGetProcAddress関数等が
Kernel32.dllに含まれるためか、コンパイルが通りません。

他の方法を試そうにも、これ以外思い浮かばず困っています。


Kernel32.dllのラッパーを作る方法、
又は、他プロセスのファイル入出力を監視する方法を
知っている方居ましたらお願いします。

54 名前:デフォルトの名無しさん :04/10/31 19:32:13
>>53
デバイスドライバ

55 名前:デフォルトの名無しさん :04/10/31 19:38:11
ローカルフックを使いたいのですが、
どこか詳しい解説をしてあるサイトはありませんでしょうか?
システムフックは今回使わないつもりです。

自分なりに調べてやったら、
どこかが間違っていたらしく、
タスクバーから何から消えた上に終了までできなくて困りましたので。

56 名前:デフォルトの名無しさん :04/10/31 19:39:11
>>53
APIフック
参考
ttp://www.codeproject.com/system/hooksys.asp
・Advanced Windows日本語版

57 名前:デフォルトの名無しさん :04/10/31 19:48:11
>>53
作らなくていいよ。
http://www.sysinternals.com/ntw2k/source/filemon.shtml

58 名前:デフォルトの名無しさん :04/10/31 20:17:03
acmを利用してWAVEファイルのフォーマットの変換に挑戦しているのですが
うまくいかないところがあるので質問させてください。

データが小さい時はacmStreamConvertを一回呼び出して終わりでこのときはきちんと変換されます。
一方、大きいWAVEファイルを変換する場合に、ループ処理で少しずつ変換させていったところ
関数自体は成功するんですが、いざ再生するとノイズの嵐になります。

以下ソース(StreamHeaderはACMSTREAMHEADERです。)
for(dwOffset=0,dwRest=dwSrcSize;dwRest>0;){
  //ソースから読み取り
  dwRead = min(dwDefRead,dwRest);
  src.FillWaveStream(dwOffset,StreamHeader.pbSrc,dwRead);//dwOffsetからdwReadだけpbSrcにWAVEストリームコピー
  dwRest -= dwRead;
  dwOffset += dwRead;
  //変換
  ::acmStreamConvert(hAcmStream,&StreamHeader,ACM_STREAMCONVERTF_BLOCKALIGN);
  //バッファに書き込み
  dst.insert(dst.end(),StreamHeader.pbDst,StreamHeader.pbDst + StreamHeader.cbDstLengthUsed);
}

デバッガで追っていてもエラーコードは返ってきていないので原因が分かりません。
ネットで調べてもacm関連のページはあまり見つからなくて解決できませんでした。
どなたかどこが間違っているか分かる方がいましたら教えてください。よろしくお願いします。


59 名前:デフォルトの名無しさん :04/10/31 20:17:24
>>45
VirtualAllocExでそのプロセス内にメモリを確保してSB_GETTEXTしてReadProcessMemoryとかで読み込んであげる。
プロセスごとにアドレスが違ってるから普通にポインタは渡せないってだけ。
OSによっては共有メモリでプロセスが違ってても同じアドレスになる。

60 名前:デフォルトの名無しさん :04/10/31 20:37:11
プロセスの作成を監視する手軽な方法ってないでしょうか?
FindFirstChangeNotificationみたいな感じにプロセスが作成されたのを通知してくれるAPIとかあるといいなと思うのですが。

61 名前:デフォルトの名無しさん :04/10/31 20:50:05
>>58
acmStreamConvert に送ったデータを変換関数が全て使い切ってない。
dwOffset を読み込んだバイト数でなく変換関数が使った分(cbSrcLengthUsed)だけ進める。



62 名前:53 :04/10/31 20:50:43
速レス、ありがとうございました。

>>54
ドライバに関する知識がないので、難しそうですが、
ドライバってハードウェア制御する以外にも色々出来るんですね。
勉強してみたいと思います。

>>56
リンク先斜め読みしただけですが、参考になりそうです。
APIのジャンプテーブルを上書きとか、とても思いつきませんでした。
Advanced Windowsはちょっと高すぎるので、
とりあえず立ち読みをしてみます・・・。

>>57
良いソフトの紹介ありがとうございます。
使ってみます。

63 名前:デフォルトの名無しさん :04/10/31 20:55:48
OSのデフォルトコードページを、自プロセスだけ、少しの間変更するようなAPIって無いんですか?

64 名前:58 :04/10/31 21:15:11
>>61
速レスありがとうございます。

> dwOffset を読み込んだバイト数でなく変換関数が使った分(cbSrcLengthUsed)だけ進める。
とありますが、この場合、StreamHeader.pbSrcには前回使われていなかった部分の先頭からでいいのでしょうか?
こんな感じに・・・
  dwRead = min(dwDefRead,dwRest);
  src.FillWaveStream(dwOffset,StreamHeader.pbSrc,dwRead);//dwOffsetからdwReadだけpbSrcにWAVEストリームコピー
  //変換
  ::acmStreamConvert(hAcmStream,&StreamHeader,ACM_STREAMCONVERTF_BLOCKALIGN);
  //オフセットとかの計算
  dwRest -= StreamHeader.cbSrcLengthUsed;
  dwOffset += StreamHeader.cbSrcLengthUsed;
  //バッファに書き込み
  dst.insert(dst.end(),StreamHeader.pbDst,StreamHeader.pbDst + StreamHeader.cbDstLengthUsed);


65 名前:58 :04/10/31 21:41:06
上のソースでうまくいってるっぽいです。
どうもありがとうございました。


66 名前:48 :04/10/31 22:04:41
>>59
なるほど。それはシンプルだね。
俺の方法は無駄に複雑にしている気がしてたんだよ。orz

今試せる環境がないので質問させてほしいんだけど、
VirtualAllocExの前に相手プロセスをOpenProcessするわけでしょ。
ログオンユーザーが一般ユーザーやゲストのときでも成功するの?

67 名前:59 :04/10/31 22:24:55
>>66
そういえば、一般ユーザーとかで試したことなかった。
取り合えず試してみたが、一般ユーザーでも問題なく動いたよ。

68 名前:デフォルトの名無しさん :04/10/31 22:37:12
サンクス
おもしろそうだし、明日にでもやってみよう。

69 名前:45 :04/10/31 23:09:24
>>67
当方Win9x系なのですが、ググっているとVirtualAllocExを使う方法は
Win9x系では使えない(?)というような話が出ていたのですが
Win9x系でも出来るのでしょうか?

70 名前:59 :04/10/31 23:28:24
9x系ではFileMappingとかで確保したメモリを使えばいける。

まとまってるのがあった。
http://www.interq.or.jp/jupiter/susumu/shrmem.html

71 名前:デフォルトの名無しさん :04/11/01 01:40:24
>>69
俺は、
 http://yebisuya.dip.jp/WinTips/tips7.html
を参考に作った事がある。

この場合、kernel32.dllに
VirtualAllocEx()
VirtualFreeEx()
があれば使えるはず。少なくとも、WinMEにはあるよ

72 名前:デフォルトの名無しさん :04/11/01 05:31:15
>>60
フックタイプをWH_CBTにしてSetWindowsHookEx()をコールする。
DllMain()のPROCESS_ATTACHでプロセスが作成されたと判断する。

ってのはどう?

73 名前:デフォルトの名無しさん :04/11/01 11:00:10
エクスプローラからファイルがドロップされた時に
ファイル名を受け取るにはどうすればいいですか?

74 名前:45 :04/11/01 11:04:41
>>70-71
thx.
さっそく挑戦してみます。


75 名前:デフォルトの名無しさん :04/11/01 11:06:34
>>73
WS_EX_ACCEPTFILES
WM_DROPFILES


76 名前:デフォルトの名無しさん :04/11/01 11:23:45
OLE Drag and Dropを使ったアプリを書いているのですが、他のアプリケーションで
ドラッグが始まったことを知りたい場合はどうやったらいいのでしょうか?

77 名前:デフォルトの名無しさん :04/11/01 11:48:45
>>76
ただのドラッグなら不可能。何を持ってドラッグ化はアプリ側で定義可能だから。

他のアプリのOLEドのラッグなら、知る方法があるが、
自分のアプリにドロップされようとしていないのに、
知ろうとするのはアプリとして間違っている。

78 名前:デフォルトの名無しさん :04/11/01 12:17:08
ツールバーをサブクラス化したのですが、
そのサブクラスがWM_COMMANDだけを受け取ってくれません。
メッセージボックスでチェックしたところ他のは受け取っているようなんですが・・・

ツールバーはCreateWindowExで作成し、
サブクラス化した後、ボタンを追加しています。

どこか問題があるのでしょうか?

79 名前:デフォルトの名無しさん :04/11/01 12:24:52
>>78
WM_COMMANDを受け取るのは親ウインドウだろ。
ツールバーのクラスが親に投げているので、サブクラスで取れるわけないじゃん。

80 名前:デフォルトの名無しさん :04/11/01 12:27:53
>>78
親ウィンドウにWM_COMMANDが送信されてると思う。

81 名前:デフォルトの名無しさん :04/11/01 12:32:59
>>79-80
なるほど。
すいません、知りませんでした。
ツールバーのどのボタンが押されたかをサブクラスで知るにはどうしたらいいのでしょうか。
ウィンドウプロシージャを弄れないので、サブクラスで受け取らなきゃいけないんです。

82 名前:デフォルトの名無しさん :04/11/01 12:56:18
>>81
ボタンなんかとれません。ツールバーのは、実はボタンじゃないから。
SPYで見てみると、このことはわかります。
なので、ツールバーを持つウィンドウクラスを一個作ってラップするか、
ツールバーを自作してください。

83 名前:デフォルトの名無しさん :04/11/01 13:00:46
>>81
親ウィンドウをサブクラス化する手もあるね

84 名前:78 :04/11/01 13:17:07
>>82-83
分かりました。
ありがとうございました。

85 名前:18 :04/11/01 16:41:08
早速ReadDirectoryChangesWのサンプルソースを使って見ましたが、
重くなるような感じはしませんでした。

それで、ReadDirectoryChangesW()を使う上で一つ疑問が生まれました。
ファイルやディレクトリの変更があった瞬間で、行ったユーザ名の情報を
どうやって取得するかです。
ネットワークでの共有ディレクトリを監視したいときに、誰がその行為を
したのかという情報を得たいためです。
ファイルやディレクトリに関するAPIを探してみましたが、ありませんでした。

どなたか何らかの方法をご存知でしたら、教えてください。

86 名前:デフォルトの名無しさん :04/11/01 16:53:51
あるウィンドウ上にBUTTONを三つほど乗せているんですが、そのボタンの上でマウスホイールが
クリックされたことを知るためにサブクラス化を用いようと思っています。この場合、そのメッセージを
受け取るためのコールバック関数はそれぞれ別にする必要はありますか?

87 名前:86 :04/11/01 17:06:46
できるみたいなのでやってみます。すれ汚しすいませんでした。

88 名前:18 :04/11/01 17:53:44
>>85
補足です。
ユーザ名を得る関数は、GetComputerNameやGetUserNameの2つがあることは
知っています。
85での取得イメージとして、ReadDirectoryChangesWで得られるFILE_NOTIFY_INFORMATION
構造体にあるファイルやディレクトリ情報を使って、ユーザ名を得たいです。

89 名前:デフォルトの名無しさん :04/11/01 17:58:56
windows2000で、
ネットワークアダプタにケーブルが接続されているかどうかを
取得できるAPIはないでしょうか?

XPだと、Win32_NetworkAdapterクラスの
NetConnectionStatusプロパティを参照で行けたのですが・・・

90 名前:デフォルトの名無しさん :04/11/01 19:42:13
BCCをウェブ講座参考にしていますが、DIBの仕組みの辺りで躓いてます。
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win120.html

bmpInfo = (BITMAPINFO *) malloc (bmpFileHeader.bfOffBits - dwBytes);
bmpFileHeader.bfOffBits - dwBytesの計算が分かりません。

dwBytesはそれ以前に代入された
ReadFile(hFile , &bmpFileHeader , sizeof (BITMAPFILEHEADER) , &dwBytes , NULL);
で代入されたBITMAPFILEHEADERのバイト数だと思うので、
ピクセルビットの開始点までの範囲からファイルヘッダの範囲を引いたら、
情報ヘッダ(BITMAPINFO)のメモリのサイズが求められるって事ですか?

91 名前:デフォルトの名無しさん :04/11/01 20:59:48
>>89
試してないけど、ここで似たようなことやってる。
ttp://www.experts-exchange.com/Programming/Q_20696554.html

INetConnectionManager

IEnumNetConnection

INetConnection ... のプロパティ
という流れらっしー。

92 名前:デフォルトの名無しさん :04/11/01 21:04:45
>>90
算数できる?
図かいて整理してみ。

93 名前:60 :04/11/01 21:05:37
>>72
うまくいきました。ありがとうです。

94 名前:89 :04/11/01 23:28:55
>>91
ソースをコピペして試してみたところ、
Windows2000でも目的の動作を実現できました。

これから、ゆっくりソースを読んで理解したいと思います。

ありがとうございました。

95 名前:76 :04/11/01 23:33:39
>>77
回答ありがとうございます。

>アプリとして間違っている。
ユーザーに有効無効を設定できるようにするので問題ないようにも思います。

目的はOLEのドラッグの検出のみです。なにか、ぐぐるのキーワード等教えていただけないでしょうか?

96 名前:90 :04/11/02 00:24:20
>92
ああ。何となく確信もてた。スマソ。
ビット苦手だOTZ

97 名前:デフォルトの名無しさん :04/11/02 14:04:52
起動ドライブのProgram Filesフォルダを取得するAPIを教えてください

98 名前:デフォルトの名無しさん :04/11/02 14:26:09
>>97
SHGetSpecialFolderLocationで、CSIDL_PROGRAM_FILES指定

99 名前:デフォルトの名無しさん :04/11/02 14:41:15
>>98
SHGetSpecialFolderLocationでぐぐったけどその定数定義してるとこみつからなかった〜
でもできますた、ありがとうエロい人

100 名前:デフォルトの名無しさん :04/11/02 16:42:43
>>71
98/Meにはエントリはあるがダミーだよ
(常にERROR_CALL_NOT_IMPLEMENTEDを返すだけ)

101 名前:デフォルトの名無しさん :04/11/02 17:22:33
レジストリに書いてなかったっけ

102 名前:デフォルトの名無しさん :04/11/02 19:09:11
>>97
ナウなヤングはSHGetSpecialFolderPath()を使うよ。

103 名前:デフォルトの名無しさん :04/11/02 22:31:27
同じプリンタに対して同じ印刷データを
通常のアプリケーションからは印刷できるけど
サービスプログラムからは印刷できないっす。

サービスはシステムローカルアカウントが動作するのが
原因と思われるんですけど、
印刷できるようにすることってできますかね?


104 名前:デフォルトの名無しさん :04/11/02 23:01:30
>>103
俺も、サービスからネットワークプリンタに印刷できなかったことがある。
ネットワークにアクセスする権限がないんだと納得してたんだけど
ローカルプリンタでもダメなのか。

それはともかく、俺の場合はLogonUser APIを使って
ネットワークにアクセスできるユーザーに偽装することで回避した。

105 名前:デフォルトの名無しさん :04/11/03 00:11:21
デスクトップにアクセス?

106 名前:104 :04/11/03 00:18:18
プリンタドライバをどうやってインストールしたか、
が関係する可能性もある。
コントロールパネルの「プリンタの追加」?

107 名前:デフォルトの名無しさん :04/11/03 02:05:34
>>102
本当にナウなヤングはSHGetFolderPathだろ

108 名前:デフォルトの名無しさん :04/11/03 02:26:29
ナウなぺヤングソースやきそば

109 名前:デフォルトの名無しさん :04/11/03 11:50:02
CDDBに接続して曲名を取得する方法をぐぐってるのですが、CDDBの使い方とかばっかりで技術的なのが出てきません。
そういう資料があるサイト知ってる方、教えて下さい。

多分、WinSock絡みの処理になるのかなーWinSock使った事ないなーとか考えつつ(;;´Д`)ハァハァしてます。

110 名前:デフォルトの名無しさん :04/11/03 12:30:38
>>109
libcdaudio を使えば出来るらしい。
http://cdcd.undergrid.net/libcdaudio/

111 名前:デフォルトの名無しさん :04/11/03 12:30:38
http://www.google.co.jp/search?hl=ja&q=CDDB+%E6%9B%B2%E5%90%8D+%E5%8F%96%E5%BE%97&lr=lang_ja

112 名前:デフォルトの名無しさん :04/11/03 16:55:08
>>109
通信内容見てみればやってることは簡単にわかるけど、たしかライセンスいるよ
CDDB ライセンス でぐぐってみ

113 名前:デフォルトの名無しさん :04/11/03 17:00:20
>>109
あと音楽関係のソフトはオープンソースが多いから
直接ソース見ればいい

114 名前:デフォルトの名無しさん :04/11/03 17:34:00
>>110 のは FreeDB のライブラリだろ?これライセンスいったっけ?
Gracenote CDDB はライセンスが必要だが。


115 名前:109 :04/11/03 19:15:47
libaudiocdってのは、ダウソできなくなってる・・・。

ライセンスいるんですかー・・・。だよなー、そううまい話がある訳ないよなぁ・・・。
あとこれ、パッと見た感じGNUぽいですね。とすると、これ使ったら漏れもソース公開しなきゃならんって事ですか。
読みやすいコードに心がけなくては・・・。

116 名前:デフォルトの名無しさん :04/11/03 21:28:28
>>106
単に、プリンタを使えるユーザーならプリンタを使える、
というだけな気がする。

117 名前:デフォルトの名無しさん :04/11/03 22:27:19
>>115
GNU使う時は、その辺が嫌だね
いい加減に書いたソースでも公開しないといけない

118 名前:デフォルトの名無しさん :04/11/03 22:55:21
質問です。
メッセージループのメッセージのないところの処理に

DWORD lNowTime = GetTickCount();
static DWORD lOldTime = 0;
if( ( lNowTime - lOldTime ) > 2 ){
 SetForegroundWindow( hWnd );
 lOldTime = lNowTime;
}
〜処理〜

と書いたのですが、起動した後すぐにアクティブになるだけで
後はぜんぜんアクティブになってくれません。
常にアクティブ(最前面)にするにはどうしたらよいでしょうか?


119 名前:デフォルトの名無しさん :04/11/03 23:12:55
>>115
そもそもlibaudiocdはWinじゃないだろ

120 名前:デフォルトの名無しさん :04/11/03 23:15:54
>>118
SetWindowPos

121 名前:デフォルトの名無しさん :04/11/03 23:32:50
そもそもメッセージループのメッセージがないところの処理て。

122 名前:デフォルトの名無しさん :04/11/03 23:45:35
>>118
DWORD lNowTime;
static DWORD lOldTime = 0;
lNowTime; = GetTickCount();
if( ( lNowTime - lOldTime ) > 2 ){
 SetForegroundWindow( hWnd );
 lOldTime = lNowTime;
}

123 名前:デフォルトの名無しさん :04/11/04 01:18:29
そもそもアクティブと最前面はまったく違う概念なわけだが
常にアクティブ(最前面)って何やねん

124 名前:デフォルトの名無しさん :04/11/04 01:26:53
システムモーダル。

125 名前:デフォルトの名無しさん :04/11/04 03:18:05
BringWindowToTop()ってのもあるよな。

126 名前:118 :04/11/04 03:56:12
ありがとうございました。

>そもそもアクティブと最前面はまったく違う概念なわけだが
なんとなく違うということはわかるのですが・・・・、
フォアグラウンド、アクティブなどでしょうか?
詳しく説明しているサイトなどはありますでしょうか?

それと、キー入力(フォーカス?)を自分にもってくるということはできるでしょうか?
最前面にもってきてユーザーからの入力を求めるような感じの。
SetFocusで、できそうなのですができません。


127 名前:デフォルトの名無しさん :04/11/04 06:55:04
TOPMOST

128 名前:デフォルトの名無しさん :04/11/04 10:05:45
>>115
>あとこれ、パッと見た感じGNUぽいですね。とすると、これ使ったら漏れもソース公開しなきゃならんって事ですか。
GNUな部分だけDLLにして逃げる、という手もある。
その代わり、せっかく作るなら使いやすいDLL作れよ・・・

129 名前:デフォルトの名無しさん :04/11/04 11:18:23
>>128
それダウンロードできないしWindows用じゃない。
適当に検索して見つかったやつを内容も見ないで無責任に教えたんだろう。

130 名前:デフォルトの名無しさん :04/11/04 12:30:48
>>129
Windows用じゃなくても、ソースを見れば何やってるか見当が付くだろう?

131 名前:デフォルトの名無しさん :04/11/04 12:43:14
>>130
わざわざWindows用じゃないやつのソース見んでも
Windows用のソースがいくらでもある。

132 名前:デフォルトの名無しさん :04/11/04 12:47:12
>>131
どこに?

133 名前:デフォルトの名無しさん :04/11/04 12:49:08
>>131
いくらでもあるなら、なんで教えてあげないの?

134 名前:デフォルトの名無しさん :04/11/04 14:00:20
VC++6でWritePwrScheme()を使ったプロセスを作っています。
「powrprof.h」と「powrprof.lib」を使用してビルドを行うと
リンクの時点で
 error LNK2001: 外部シンボル "
 "unsigned char __stdcall WritePwrScheme(unsigned int *,char *,char *,struct _POWER_POLICY *)"
 (?WritePwrScheme@@YGEPAIPAD1PAU_POWER_POLICY@@@Z)" は未解決です
とエラーが発生しビルドできません。
「powrprof.h」と「powrprof.lib」のバージョンが合っていないのでしょうか?
そうだとしたらVC++6でビルドできる「powrprof.h」と「powrprof.lib」は
どうやって入手すればよいのでしょうか?
ちなみに
CanUserWritePwrScheme()でも同一リンクエラーが発生します
 

135 名前:デフォルトの名無しさん :04/11/04 14:08:13
http://www13.cds.ne.jp/~wstar/n/cddb2.dml
http://www.gracenote.com/gn_japan/cddb.html

136 名前:デフォルトの名無しさん :04/11/04 14:18:29
>>135
> http://www13.cds.ne.jp/~wstar/n/cddb2.dml
Windowsのソース?

> http://www.gracenote.com/gn_japan/cddb.html
製品

137 名前:デフォルトの名無しさん :04/11/04 14:42:00
>>134
そもそも、素のVC6に「powrprof.h」と「powrprof.lib」ってあったっけな・・・

とりあえず、>>2のPlatformSDK updateしてみたら?

138 名前:デフォルトの名無しさん :04/11/04 14:52:16
>>137
>素のVC6に「powrprof.h」と「powrprof.lib」ってあったっけな・・・
VC7にあるのを使ってますが、蛇道ですか?

139 名前:デフォルトの名無しさん :04/11/04 16:33:17

>>104
亀レスでスマソ
LogonUserのAPIでいけそうです

で、そのLogonUserのパラメータへ設定するドメイン名/ユーザー名/パスワードを
事前にチェックようと思いまして、
NetUserChangePasswordで新旧パスワードを一緒にしてチェックをしてみたんですけ
ど、
該当ドメインに参加してない端末から、ユーザ名/パスワードが正しいかをチェック
しようとすると
ERROR_CANT_ACCESS_DOMAIN_INFO(1351)というエラーが返却されるんですが、

他にユーザ名/パスワードをチェックする方法ってあったりするんでしょうか?



140 名前:デフォルトの名無しさん :04/11/04 16:33:47
>>134
これはどうだ?
extern "C" {
#include <powrprof.h>
}

141 名前:デフォルトの名無しさん :04/11/04 16:45:23
>>140
べりーないす!ありがd!

142 名前:デフォルトの名無しさん :04/11/04 17:06:33
>>140
スゲー 美しくは無いけどその発想に脱帽

143 名前:デフォルトの名無しさん :04/11/04 17:16:16
発想って…
常套句なんだがなあ

144 名前:デフォルトの名無しさん :04/11/04 17:37:23
タスクバーのアイコンをクリックしたときのメッセージを教えてくださ

145 名前:デフォルトの名無しさん :04/11/04 17:50:14
WM_LBUTTONUP

146 名前:デフォルトの名無しさん :04/11/04 18:00:06
エロい人ありがとう

147 名前:デフォルトの名無しさん :04/11/04 19:09:55
エディットボックスに半角英数しか
入力できないようにするにはどうしたらよいでしょうか。

148 名前:デフォルトの名無しさん :04/11/04 19:14:58
>>135
Gracenoteのサンプルあっさり動いた。
ライセンスまだ届いてないけどいいのか?

149 名前:デフォルトの名無しさん :04/11/04 19:20:51
Windows98 と bcc5.5.1 を使ってますが、GetSystemMetrics() は
戻ってきた時、レジスタ eax, edx, ecx を破壊していませんか?
たとえば
GetSystemMetrics(SM_CXSCREEN);
と呼んでみた時です
デバッガで、この関数の前後でのレジスタの変化をみました

この関数は
windef.h や winuser.h の中で
#define CDECL _cdecl
#define WINAPI CDECL
int WINAPI GetSystemMetrics(int nIndex);
と宣言されているようです

返り値のために eax が破壊されるのはわかるのですが
てっきり edx, ecx は保存されていると思っていた…

WINAPI は、eax, edx, ecx を破壊する呼び出し規約でしょうか?

150 名前:デフォルトの名無しさん :04/11/04 19:26:24
>>149
 確か x86 用の VC++ (Microsoft の C/C++ コンパイラ) の ABI では、
関数呼び出しで ebp 以外の汎用レジスタはどれも破壊しても構わない
ことになっていたような気がする・・・bcc でも同様でしょう。

151 名前:デフォルトの名無しさん :04/11/04 19:27:03
win2000,VC6でMFCを使わずにwindowsアプリを開発しています。
マウスカーソルを消したいのですが、どうすればいいでしょうか?
ShowCursor(true)は、ウィンドウ外に行くとマウスカーソルが表示されてしまいます。
SetCursor(NULL)とやってみましたが、マウスカーソルが消えすらしませんでした。

152 名前:デフォルトの名無しさん :04/11/04 20:14:59
SetCaptureしてからShowCursorすれば?

153 名前:デフォルトの名無しさん :04/11/04 20:21:30
アフォの言うことは聞かないように

154 名前:デフォルトの名無しさん :04/11/04 20:24:41
>>152さん、どうもです。

SetCapture(hWnd);
ShowCursor(false);
こう書いてみましたが、メインフレームからはずれると消したマウスが表示
されてしまいます。


155 名前:デフォルトの名無しさん :04/11/04 20:27:17
>>153
天才のあなたなら答えがわかるのではありませんか?

156 名前:デフォルトの名無しさん :04/11/04 20:40:36
答えは「そんなことを望んではいけない」だ

157 名前:デフォルトの名無しさん :04/11/04 20:43:52
>>156
無理だという事なんでしょうか?
それともただのなじりでしょうか?
理解しかねます。。。

158 名前:デフォルトの名無しさん :04/11/04 21:00:50
きょうは、ようちえんですなどけいのえをかきました。じょうずにかけたので
はやくおかあさんにみてほしいなとおもっていたら、けんじくんがぼくのえを
びりびりとやぶってしまいました。おかあさんにきょうはどんなことをしたのと
きかれたので、みんなでなわとびをしたといいました。

159 名前:デフォルトの名無しさん :04/11/04 21:05:58
>>147
エディットボックスに半角英数しかはIME起動しなくすればよさそうだけど
コピペできちゃうから

160 名前:デフォルトの名無しさん :04/11/04 21:10:39
>>149
eax/edx/ecx: 破壊してもよい
ebx/esi/edi: 破壊しちゃだめ
となっております。
Windows だけじゃなくて、i386 で動く UNIX でも全部そうなってる。


161 名前:デフォルトの名無しさん :04/11/04 21:11:53
>>151は無理そうですね。残念です。
透明なマウスカーソルで置き換えられるか試そうと思います。

162 名前:デフォルトの名無しさん :04/11/04 21:15:01
>>157
そんなアプリを使わされたらブチ切れそうってことではないかとw

163 名前:デフォルトの名無しさん :04/11/04 21:24:46
>>157
他APのSetCursor とか WM_SETCURSOR とかをフックすればできるとは思います。
逆にかならずマウスカーソルを表示させるために同様のことをするAPと同時に動くと、
動作は不定なのだろうけれども。

>>162
タッチパネル付きモニタとかで使う業務用端末とかじゃないの?

164 名前:デフォルトの名無しさん :04/11/04 21:32:14
マウスをどっかに固定しとけば?

165 名前:デフォルトの名無しさん :04/11/04 21:38:09
あー SetCursorPos(0,0);
やってみたらとんでもないことに

166 名前:デフォルトの名無しさん :04/11/04 22:12:49
マウスドライバを削除すれば?

167 名前:デフォルトの名無しさん :04/11/04 22:38:02
だから答えるなと

168 名前:デフォルトの名無しさん :04/11/05 00:04:28
フォントサイズのデフォルトの値は環境によって変わるものですか?
また、通常のデフォルトのフォントサイズの値を教えてください。

169 名前:デフォルトの名無しさん :04/11/05 00:09:22
>>147
自由に入力させて、入力を全部チェック
入力文字を調べて、'a'〜'z'か'A'〜'Z'か'0'〜'1'以外の値なら削除

170 名前:デフォルトの名無しさん :04/11/05 00:51:02
大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/

応援するスレはこちら!
http://school4.2ch.net/test/read.cgi/job/1077432387/

最高の会社にするため、みんな頑張ってます!



171 名前:デフォルトの名無しさん :04/11/05 01:09:51
マウスをはずせば良い

172 名前:デフォルトの名無しさん :04/11/05 01:32:59
ビットマップで塗りつぶしたウィンドウに、
DrawTextで文字を書くと、
文字の背景に白い四角形がでてきます。
文字だけを表示するためにはどうすればよいのでしょうか。

ビットマップの上にさらにビットマップを重ねるときは、
透過処理用のビットマップを用意してBitBltで重ねるのは知っているのですが。

173 名前:デフォルトの名無しさん :04/11/05 01:34:37
オバキュー

174 名前:デフォルトの名無しさん :04/11/05 01:36:33
SetTextMode

175 名前:デフォルトの名無しさん :04/11/05 01:39:14
SetBkModeじゃね?
つうかこんなのググれば一発なのに。

176 名前:デフォルトの名無しさん :04/11/05 01:43:07
あぁ、ごめん、DrawTextだとうまくいくかワカンネ。
TextOutなら上手くいった記憶あり。

177 名前:172 :04/11/05 01:45:25
初歩の初歩でした。
すみません。
でも私はこれで30分以上詰まってたので、
大変助かりました。

178 名前:デフォルトの名無しさん :04/11/05 01:48:05
DrawTextで大丈夫でした。ありがとうございます。

179 名前:147 :04/11/05 01:53:11
>>159>>169
どもです。
やっぱ入力後にチェックするのが確実そうですね。
ありがとうございました。

180 名前:デフォルトの名無しさん :04/11/05 01:59:17
>>173
すでにわかってるやつにしかわからないという無意味さにワロタ

181 名前:デフォルトの名無しさん :04/11/05 02:20:37
スルーされてるしな

182 名前:デフォルトの名無しさん :04/11/05 11:23:18
いてーよーオバキュー

183 名前:デフォルトの名無しさん :04/11/05 12:23:57
オペ逝く?

184 名前:デフォルトの名無しさん :04/11/05 12:42:59
ET用オバキュー

185 名前:デフォルトの名無しさん :04/11/05 12:47:46
OPAQUEをオパキューと読むスレはここですか?

186 名前:デフォルトの名無しさん :04/11/05 12:49:22
>>185
http://pc5.2ch.net/test/read.cgi/tech/1056173956/


187 名前:デフォルトの名無しさん :04/11/05 13:13:15
>>185
オパクエだろ

188 名前:デフォルトの名無しさん :04/11/05 16:33:11
数値(int)を文字列に変換するAPIおしえて

189 名前:デフォルトの名無しさん :04/11/05 16:43:32
wsprintf

190 名前:デフォルトの名無しさん :04/11/05 16:57:39
>>189
それ逆だからっ!

191 名前:デフォルトの名無しさん :04/11/05 16:59:09
StrToIntExって何かリンクしないと使えない?

192 名前:デフォルトの名無しさん :04/11/05 17:01:10
何もリンクせずに使えるWin32APIは無いよ

193 名前:デフォルトの名無しさん :04/11/05 17:01:24
>>191
それ逆じゃないか?

194 名前:デフォルトの名無しさん :04/11/05 17:03:07
>>191
shlwapi
ちなみにこれはWin98/2kかIE4以降でないと入っていない。

195 名前:デフォルトの名無しさん :04/11/05 17:06:17
>>193
逆だから
>>194
そのヘッダーはインクルードしてんだけど、リンク時になんかStrToIntExAが未解決って

196 名前:デフォルトの名無しさん :04/11/05 17:06:21
>>194

197 名前:デフォルトの名無しさん :04/11/05 17:09:27
「何かリンクしないと使えない?」
「shlwapi」
「そのヘッダーはインクルードしてんだけど」


198 名前:デフォルトの名無しさん :04/11/05 17:09:39
>>195
インポートライブラリをリンクしろ。
ところで188ではint→charを聞いているがStrToIntExはchar→intだぞ。

199 名前:デフォルトの名無しさん :04/11/05 17:11:54
>>198
なにむきになってんの?

200 名前:デフォルトの名無しさん :04/11/05 17:19:03
・int->char*
sprintf
・INT->LPTSTR
wsprintf
・char * -> int
atoi
・LPTSTR->INT
_ttoi

201 名前:デフォルトの名無しさん :04/11/05 17:20:54
自己解決しました。

202 名前:デフォルトの名無しさん :04/11/05 17:39:39
自己満足しました。

203 名前:149 :04/11/05 18:28:47
>>150さん、>>160さん、どうもありがとう

204 名前:デフォルトの名無しさん :04/11/05 18:56:52
自己猫耳ごっこしました。


205 名前:デフォルトの名無しさん :04/11/05 20:18:40
自己完結しました

206 名前:デフォルトの名無しさん :04/11/05 22:01:39
最大化ボタンを押されたのを知るにはどうすればいいですか?

207 名前:デフォルトの名無しさん :04/11/05 22:48:15
WM_SYSCOMMND

208 名前:デフォルトの名無しさん :04/11/05 22:54:31
>>188
SetDlgItemIntしてGetDlgItemText

209 名前:206 :04/11/05 23:08:30
>>207
ありがとうございます。

210 名前:デフォルトの名無しさん :04/11/05 23:26:33
>>208
文字配列をソートするのに、LBS_SORTなリストボックスにぶちこんでから
取り出していた奴は実在する。

211 名前:デフォルトの名無しさん :04/11/05 23:26:46
32ビットのDIBを作って、指定したピクセル群にアルファ値を設定したいです。
GDI+ではブラシなどがアルファ値をもつので普通の描画操作(Polygonなど)で
できると思うのですが、GDIでこれをやるにはメモリを直接書き換えるしかないの
ですか?

212 名前:デフォルトの名無しさん :04/11/05 23:37:10
まぁ普通はDIBSectionでやるよな。

213 名前:デフォルトの名無しさん :04/11/06 00:11:54
>>212
異常者は?

214 名前:デフォルトの名無しさん :04/11/06 03:16:45
>>213
SetPixcel()

215 名前:デフォルトの名無しさん :04/11/06 07:37:13
>>210
某VBマガジンでソートの実装が面倒なときはこんな事もできると紹介されていたな

216 名前:デフォルトの名無しさん :04/11/06 07:45:33
>>214
異常者!無理じゃねーか

217 名前:デフォルトの名無しさん :04/11/06 09:46:27
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwui/htm/layer.asp

218 名前:デフォルトの名無しさん :04/11/06 10:30:41
>>217
あほ

219 名前:デフォルトの名無しさん :04/11/06 14:33:16

WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,
を指定して作ったウインドウの、クライアント領域を600に固定したいときの、
nHeightの指定の仕方を教えてください。

#define WINDOW_TATE (600 + SM_CYFRAME + SM_CYMENU)
では、少しクライアント領域が広くなるようです。

220 名前:デフォルトの名無しさん :04/11/06 14:39:25
>>219
AdjustWindowRect

221 名前:デフォルトの名無しさん :04/11/06 14:44:03
即答ありがとうございます。

222 名前:デフォルトの名無しさん :04/11/06 15:07:44
>>221
出来たみたいだからいいけど、

> #define WINDOW_TATE (600 + SM_CYFRAME + SM_CYMENU)

明らかに使い方間違ってないか?

223 名前:デフォルトの名無しさん :04/11/06 16:31:08
MFCとかアプリケーションウィザードとか使わずに、
普通にリソースエディタを使ってダイアログベースのアプリを作ってます。
それで、メインのダイアログにメニューをつけようとしてるんですが、
リソースにメニューを挿入し、そのメニューのIDを
メインダイアログの「プロパティー」の「一般タブ」から
指定してあげてもテストプレビューでメニューがまったく表示されません。
なにか他に必要な設定などはあるのでしょうか?
それともテストでは見えないものなんでしょうか?

224 名前:223 :04/11/06 16:57:04
コンパイルしたらちゃんと表示されたから
そういう仕様なのかな…

225 名前:デフォルトの名無しさん :04/11/06 17:11:10
マウスの左ボタンをおして画面上を動かすと、画面の絵が動くようにしていて
途中で落ちるので、調べた結果、CreatePen() の廃棄洩れがあったのですが、
何回かは廃棄洩れがあっても動きます。何が満杯になると落ちるのか、分かり
ますか。

226 名前:デフォルトの名無しさん :04/11/06 17:16:38
GDIリソース
XPにも9xよりはるかに数字は大きいが上限はある

227 名前:デフォルトの名無しさん :04/11/06 17:19:26
普通「破棄」だと思うが。
原因は「破棄のし忘れでリソース不足に陥っていること」だろう。
破棄をきちんとすればいいこと。

228 名前:デフォルトの名無しさん :04/11/06 17:22:23
透明なウインドウを作りたいのですが、
どうすればできるでしょうか。

C言語、borlandのコンパイラで作成しています。

229 名前:デフォルトの名無しさん :04/11/06 17:34:55
「透明なウィンドウ」という言葉の意味による。
見えないウィンドウって意味なら表示させなきゃすむわけだが。

230 名前:デフォルトの名無しさん :04/11/06 17:42:58
>>228
Layered Window

231 名前:デフォルトの名無しさん :04/11/06 17:49:42
インターネットエクスプローラのクライアント領域を全て選択→コピー
するような文字列の取得を行うプログラムを作るにはどうすればいいのでしょうか?
対象プログラムのタイトルとか各コントロールの文字列を取得するのは分かったんだけど、
クライアント領域を手動でコピーするような操作が分からない
不可能なのでしょうか?

232 名前:デフォルトの名無しさん :04/11/06 18:14:12
MSAA

233 名前:デフォルトの名無しさん :04/11/06 19:40:35
任意の文字列を再変換したいんですけど、
うまくできません。
というより、どうすれば良いのかよくわかりません。
とりあえず、再変換構造体PRECONVERTSTRINGとか
ImmSetCompositionString()を使うって
ところまではわかったのですが…。
実際これを使ってどうすれば良いのでしょうか?


234 名前:ほんたま :04/11/06 20:34:14
おみゃ〜らよ、system32フォルダにあるDLLの関数を呼び出すには、インポートセクションにDLL名と関数名を書き込んでいくだけで、呼び出せるんだが、
VC++で自分でつくったDLLの関数を同じ方法で呼び出そうとすると、「DLL何に○○のエントリーポイントが見つかりません」というメッセージが出て呼び出せないんだ…
おみゃ〜らよ、自分でつくったDLLとwindows付属のDLLとは、どっか構造が違うのかな?
windows付属のDLLと同じ構造のDLLを自分でつくるにはどうすればいいの?
教えてくだされ〜♪


235 名前:デフォルトの名無しさん :04/11/06 20:47:44
えーと、インポートセクションって何だっけ?

236 名前:デフォルトの名無しさん :04/11/06 20:47:45
>>234
DLL 作るとき extern "C" した?

237 名前:デフォルトの名無しさん :04/11/06 20:58:03
便乗質問。
Dependency WalkerでDLLがエクスポートしている関数を見るとき、
自作DLLの関数を見ると、"_hoge@4"のように呼び出し規約に従った接頭・接尾文字が
エクスポートされているように見えるんだが、
たとえばKernel32.dllのGetProcAddressはそのまま"GetProcAddress"でエクスポートされている感じ。
この違いは何が原因?

238 名前:デフォルトの名無しさん :04/11/06 20:58:26
マルチにレス不要

239 名前:236 :04/11/06 20:59:02
>>237
それも extern "C" しなされ。

240 名前:237 :04/11/06 21:09:50
関数のプロトタイプ全てに一々書く必要があるん?
一応ソース自体も.cなファイルなので、ヘッダでは

#ifdef _cplusplus
extern "C" {
#endif

なんて書いてるんだけど…

241 名前:236 :04/11/06 21:14:49
>>240
ごめん、__stdcall も必要かもしれない。

extern "C" __declspec(dllexport)
int __stdcall Func(...)

こんなんだっけな。

242 名前:デフォルトの名無しさん :04/11/06 21:19:44
>>240
マクロ化しておけばいいだろう。
ちなみに .c なら extern "C" はいらないよ。

243 名前:237 :04/11/06 21:21:11
自己解決しました。
defファイルを書けばいいのですね。

244 名前:236 :04/11/06 21:22:52
>>241
なんども間違えてすまんな。
MSDN で __stdcall を調べてみれば分かると思うけど、
__stdcall には @ がつくんだ。
これをなくそうと思ったら .def ファイルで定義する必要があったと思う。

245 名前:デフォルトの名無しさん :04/11/06 21:33:05
で、インポートセクション…

246 名前:236 :04/11/06 21:37:19
>>245
たぶん、PE ファイルのインポート セクションのことだろう。
IAT (Import Address Table) とか、そういうのあるところ。

247 名前:デフォルトの名無しさん :04/11/06 21:59:53
177 名前:ほんたま :04/11/06 20:40:20
おみゃ〜らよ、system32フォルダにあるDLLの関数を呼び出すには、インポートセクションにDLL名と関数名を書き込んでいくだけで、呼び出せるんだが、
VC++で自分でつくったDLLの関数を同じ方法で呼び出そうとすると、「DLL何に○○のエントリーポイントが見つかりません」というメッセージが出て呼び出
せないんだ…
おみゃ〜らよ、自分でつくったDLLとwindows付属のDLLとは、どっか構造が違うのかな?
windows付属のDLLと同じ構造のDLLを自分でつくるにはどうすればいいの?
教えてくだされ〜♪

248 名前:236 :04/11/06 22:15:31
>>247
だから .def ファイルを使うんだって。
.cpp で関数を定義しているんなら extern "C" をしておいたほうがいい。

249 名前:219 :04/11/06 22:48:23
>>222
間違っていました。
#define WINDOWS_TATE 600

HWND hWnd;
int y1, y2, y3;
y1 = GetSystemMetrics(SM_CYFIXEDFRAME);
y2 = GetSystemMetrics(SM_CYCAPTION);
y3 = GetSystemMetrics(SM_CYMENU);

hWnd = CreateWindow(〜〜〜〜〜〜, WINDOWS_TATE + y1 + y2 + y3 ,〜〜〜);

が正しいと今の自分は思っています。
GetSystemMetricsで値を得る前に#defineで定義してはまったくだめですね。



250 名前:228 :04/11/06 22:51:21
>>229
ウインドウの背景を透明化させたいです
最初にNULL_BRUSHを指定したの時のように(これはただ塗りつぶさないだけのようですが。。)
>>230
詳細がのっているところはありませんか?


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.