CraeteProcess( ) を使ってサイトを新しいウインドウで
開くためのSDK、BCC32用のソースを教えてください。
ShellExecute(NULL,"open","http://~",NULL,NULL,SW_SHOWNORMAL);
ではIEの設定に左右されるらしいから CraeteProcess( ) で
やろうと思いました。

もう1つ質問なんだけど、C に限らず、
  真理値は偽なら 0 、真なら 0 以外。
ということ説明をたまに見かけます。
実際やった結果では、どれも
真理値は偽なら 0 、真なら 1。
でした。
真の場合に 1 意外の値を返す場合があるから
1 ではなく、 0 以外 というふうに書いてあるんだと思うんだけど
真で 1 意外の値が帰って来た経験がある方はいらっしゃいますか?

A 回答 (2件)

Windows XP + VC++6.0 で試したのですが、とりあえず問題なかったけど、何かミスがあるのかな・・・。



私のところでもログオンしてから30~60秒くらいは、シェル関係の呼び出しが、ちゃんと出来ません。デバイスを全て認識するのに時間がかかっていて、待たされるようです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
そういえば、Windows っていうOSは、起動して
というか、起動し始めて、しばらく待たないと
一見、落ち着いたように見えても、正常に動作しない
部分があるらしいですねー。

BCC32 でコンパイルして、Win98 でまだ成功していません。

お礼日時:2002/02/12 02:09

自分でも使えそうなので作ってみました。

適当にリファインしてみてください。

static TCHAR iesk[] = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE");
static TCHAR url[] = _T("http://oshiete.goo.ne.jp/");
static TCHAR curdir[] = _T("C:\\");
TCHAR cmdline[1024];
HKEY key;
DWORD type = REG_SZ;
DWORD size = 1024;
STARTUPINFO si;
PROCESS_INFORMATIONpi;

RegOpenKeyEx(HKEY_LOCAL_MACHINE, iesk, 0, KEY_QUERY_VALUE, &key);
RegQueryValueEx(key, NULL, NULL, &type, (LPBYTE)cmdline, &size);
lstrcat(cmdline, _T(" "));
lstrcat(cmdline, url);
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.wShowWindow = SW_SHOW;
CreateProcess(NULL, cmdline, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, curdir, &si, &pi);

この回答への補足

ありがとうございます。
もう少しでできそうなとこまでいきました。

新しいウインドウで開くことができたけど、
Win98から、IEのページ違反だったかな?
何かのエラーダイアログが表示されて、
IEが使えなくなってしまうんです。
IEを使うためにはWin98を再起動する必要がある状態です。
再起動してもう1度、EXEを実行しても、
CreateProcess は実行されません。
起動後にしばらくパソコンを使うと、いつのまにか
CreateProcess が使える状態になっています。

今は、IEのエラーダイアログの原因より、
この、起動後すぐには CreateProcess が使えない
という原因究明を考えています。
だいたい、起動後10分ぐらい、適当にパソコンを使っていると
CreateProcess が実行できるようになります。
実行できない時の場合はエラー表示はありません。
今は CreateProcess でメモ帳を指定してやっています。
メモ帳なら、ページ違反とかいう問題もなく
CreateProcess で実行できているけど、Win98起動後すぐに
は CreateProcess でメモ帳も起動することができません。

補足日時:2001/12/03 12:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBA IE11 ファイルのダウンロード

(1)作業環境
Windows 7 Professional SP1
Intel(R) Core(TM) i3­3240 CPU @ 3.40GHz 4.00GB
32ビットオペレーティングシステム
Microsoft Office Standard 2010
Excel ver 14
Internet Explorer11


(2)やりたいこと
あるWebページで手動操作の場合、次をクリックすると添付画像のように「~を開くか、または保存しますか?」というポップアップみたいなのがIEの下に現れます。
<a href="/xxxx/download.do?xxxx&xxxx&xxxx&xxxx&type=log">テスト</a>
「保存(S)」をクリックしてデスクトップに保存する。

これをVBAで操作して、ファイルのアップロードを行いたい。
※添付画像で黒線で消してあるのはIPアドレスです。
※上記「xxxx」は、元が固有名称のためこれで置き換えています。


(3)状況
保存されるものは「upload.log」というファイルです。
このポップアップのVBAでの操作方法はまったくわかりません。
下記ページを参照し、書いていることは理解できるためそのまま適用しましたが、どうやらhrefからリンク(fileURL)を取得してもそこにはファイルはないみたいです。
http://www.vba-ie.net/element/subroutine-filedownload.html
ダウンロードされる意図しているupload.logファイルではなく、ある画面のソースコードになっています。
<a href="....">テスト</a>をクリックしたあとにlogファイルを生成していると予想しています。


(4)質問事項
upload.logのファイルをダウンロードをするにはどういうマクロになるのか

以上、ご存じのかたご教示お願いしいたします。

(1)作業環境
Windows 7 Professional SP1
Intel(R) Core(TM) i3­3240 CPU @ 3.40GHz 4.00GB
32ビットオペレーティングシステム
Microsoft Office Standard 2010
Excel ver 14
Internet Explorer11


(2)やりたいこと
あるWebページで手動操作の場合、次をクリックすると添付画像のように「~を開くか、または保存しますか?」というポップアップみたいなのがIEの下に現れます。
<a href="/xxxx/download.do?xxxx&xxxx&xxxx&xxxx&type=log">テスト</a>
「保存(S)」をクリックしてデスクトップに保存す...続きを読む

Aベストアンサー

目的のファイルのURLはサーバーサイドのプログラム中にあってプログラムで書き出されたHTMLには存在しないとおもいますのでIEでファイルを開いて実際のURLを確認してみては?

QSendMessage(hW,WM_CREATE,0,0);を

SendMessage(hW,WM_CREATE,0,0);
を実行するとシステムがWM_DOWNやWM_CHARを発行しなくなるみたいです
というのはそれ以降キー入力を無視するようになるのです
いったんアプリをアイコン化してウィンドウ化するとWM_DOWNやWM_CHARを発行するようになります
WM_CREATEを送ってもWM_DOWNやWM_CHARを発行しなくなるのを阻止するために何か方法はないでしょうか?

Aベストアンサー

>プログラムのイニシャライズのために送ったのですが送らないで住むプログラムに変更しました

普通はそんな方法はとりません。
システムが何をするか分からないからです。

自分でメッセージを定義して、初期化処理を行うようするためのメッセージを送るほうが無難です。
WM_CREATEと同じ処理を初期化処理として行わせたいのであれば、初期化処理を関数化して自分で定義したメッセージでも呼び出せばいいのですし。


>作ったプッシュボタンを押してシステムがWM_COMMANDを送ってきた後キー関係のメッセージを送ってくれなくなります

プッシュボタンがキーボードフォーカスを持ってのるでは?

ボタンがキーボードフォーカスを持っていてもキー関連のメッセージを親ウィンドウが受け取りたいのであれば、サブクラス化をするしかないでしょう。

QIE 10,11でアプリがダウンロードできません

Win7-64bit で、私と妻のアカウント(共に管理者)があります。
Internet Explorer を「11」にしたら、妻のアカウントの方だけフリーソフトなどをダウンロード
出来なくなりました(クリックしても何も反応しない)。
試しに「IE11」を削除して「IE9」に戻したら問題なくダウンロードできます。
「IE10]でもだめでした。

セキュリティーソフトやポップアップブロックを無効にしても関係ないようです。
画像などは普通に保存できるのでアプリだけがダメみたいですが、私のアカウントと設定は同じなのになぜ妻の方だけ出来ないのか不明です。
ちなみに「IE10]と「IE11]のインストールは私のアカウントで行っています。

Aベストアンサー

>セキュリティーソフトやポップアップブロックを無効

(1)WindowsファイアーウォールでIEをブロックしていませんか?
(2)ブラウザのセキュリティ設定でブロックしていませんか?
例:ActivXコントロールとスクリプト「無効」→「有効」(複数あり)
例:レベル「高」→「中高」
例:「ツール」「インターネットオプション」「セキュリティ」「レベルのカスタマイズ」「セキュリティの設定」「ダウンロード」「ファイルのダウンロード」「無効」→「有効」
(3)Vista以降、Administratorでログオンしても作業実行時アクセス権が必要な場合が多い。
プログラムアイコンを右クリック「管理者として実行」で作業(解凍・展開、インストール、起動、コピー、アンインストールなど)

ブラウザIEのみを、フリーソフトのFirefoxやGoogle Chromeなどと併用する(IEでないと開かないサイトもあるためIEも必要)・・・プログラムはあなたがダウンロードする。
ちなみに私は平常(軽い)SRWare Iron(Google Chrome派生)を使用、IEでないと見れないサイトのみIEを起動しています。(IEはほとんど使っていない)

>セキュリティーソフトやポップアップブロックを無効

(1)WindowsファイアーウォールでIEをブロックしていませんか?
(2)ブラウザのセキュリティ設定でブロックしていませんか?
例:ActivXコントロールとスクリプト「無効」→「有効」(複数あり)
例:レベル「高」→「中高」
例:「ツール」「インターネットオプション」「セキュリティ」「レベルのカスタマイズ」「セキュリティの設定」「ダウンロード」「ファイルのダウンロード」「無効」→「有効」
(3)Vista以降、Administratorでログオンしても作業実...続きを読む

Qマウスの位置でa,bの値が変化し、a,bの値が変化することでpx,pz

マウスの位置でa,bの値が変化し、a,bの値が変化することでpx,pzの値も変化し、車の座標が変わるようにしたいのですが、以下のようにするとマウスを動かしても反応がありません。
px = a; の部分を px = 10; にしてみると車の座標が変わるため、static void mouseの部分がおかしいと思うのですが、どう間違えているか分からないでしょうか?
文字数制限の関係上、関連する部分のみ抜粋します。


#include <stdlib.h>
#include <GL/glut.h>

#define W 6
#define D 9

int s,t,a,b;

static void display(void)
{
const static GLfloat lightpos[] = { 3.0, 4.0, 5.0, 1.0 }; /* 光源の位置 */
const static GLfloat yellow[] = { 0.8, 0.8, 0.2, 1.0 }; /* 車の色   */
static GLdouble px = 0.0, pz = 0.0; /* 車の位置  */
static GLdouble r = 0.0; /* 車の方向  */

px = a;
pz = b;

/* 画面クリア */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

/* モデルビュー変換行列の初期化 */
glLoadIdentity();

/* 光源の位置を設定 */
glLightfv(GL_LIGHT0, GL_POSITION, lightpos);

/* 視点の移動(物体の方を奥に移す)*/
glTranslated(0.0, 0.0, -25.0);
glRotated(30.0, 1.0, 0.0, 0.0);

/* シーンの描画 */
myGround(0.0);
glPushMatrix();
glTranslated(px, 1.0, pz);
glRotated(r - 90.0, 0.0, 1.0, 0.0);
glMaterialfv(GL_FRONT, GL_DIFFUSE, yellow);
glutSolidTeapot(1.0);
glPopMatrix();

glFlush();
}

static void resize(int w, int h){
s = w/2;
t = h/2;
}

static void mouse(int u, int v) //
{
if((s - u) > 0){
a = 10;
}else if((s - u) < 0){
a = -10;
}
if((t - v) > 0){
b = 10;
}else if((t - v) < 0){
b = -10;
}

}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glutReshapeFunc(resize);
glutKeyboardFunc(keyboard);
init();
glutMainLoop();
glutPassiveMotionFunc(mouse);//マウスドラッグ時
return 0;
}

マウスの位置でa,bの値が変化し、a,bの値が変化することでpx,pzの値も変化し、車の座標が変わるようにしたいのですが、以下のようにするとマウスを動かしても反応がありません。
px = a; の部分を px = 10; にしてみると車の座標が変わるため、static void mouseの部分がおかしいと思うのですが、どう間違えているか分からないでしょうか?
文字数制限の関係上、関連する部分のみ抜粋します。


#include <stdlib.h>
#include <GL/glut.h>

#define W 6
#define D 9

int s,t,a,b;

static void display(void)
{
...続きを読む

Aベストアンサー

glutMainLoop();
glutPassiveMotionFunc(mouse);//マウスドラッグ時

どうしてglutMainLoopのあとでglutPassiveMotionFuncをコールしてるの?

QIEのバージョン確認とダウンロード方法

(1)現在IEは11が最新版のようですが、使用IEがどのバージョンか確認する方法を教えて下さい。
(2)もし10以下であれば、11をダウンロードする方法を教えて下さい。

*Windows7を使用しています。

Aベストアンサー

右上の★マークの右のボタンを押す
バージョン情報

もしくは、
Alt + H そして、次にA を押す

Microsoft Update/Windows Updateを有効にしていると、自動的にインストール(半強制)となっているので、無効などしていない限り半強制的にIE11にアップされています

http://windows.microsoft.com/ja-jp/internet-explorer/ie-11-worldwide-languages
ここからダウンロード方法もあります

Qdc.TextOut(0 ,0 , *str) ;について

環境 WIN98 VC++6.0 MFC にて

パターンBはOKですが、パターンAだと不正な処理で落ちてしまいます。

どうしてなのかお教えください。

void CFffView::OnPaint()
{
CPaintDC dc(this);
//パターンA
CString* str ;
str = (CString*)("999");
dc.TextOut(0 ,0 , *str) ;

//パターンB
CString aaa ;
aaa = (CString)("999");
dc.TextOut(0 ,0 , aaa) ;
}

Aベストアンサー

両方ダメ。
Aのパターンで動くのは、たまたま。

CString aaa ;
aaa = "999";
dc.TextOut(0 ,0 , aaa) ;

これで十分。

あえてキャストするんだったら、
CString aaa ;
aaa = (LPCSTR)"999";
dc.TextOut(0 ,0 , aaa) ;


aaa=のところでは、ただの代入が行われているわけではありません。
オーバーロードされたオペレータが呼ばれています。


>str = (CString*)m_array.GetAt(i) ;

これは、m_arrayの要素にCString*を入れていて、初めて成り立つ式です。
値をいれているところと、m_arrayの宣言を確認してください。

str = (CString*)("999");
も、
aaa = (CString)("999");
も、リテラル文字列をつっこもうとしています。
リテラル文字列とCStringはまったく別物です。

QIE11について

初めまして

実は、今回初めてIE11を使いました。

そこで、ツールのインターネットオプションから、削除を選択し、履歴とダウンロード履歴を削除すると互換表示の設定がすべて削除されます。

これは、IE11の機能でしょうか?

Aベストアンサー

>これは、IE11の機能でしょうか?
いいえ

初心者でもわかる! IE で互換表示 (IE10/IE9)
https://support.microsoft.com/kb/2618122/ja

Q0x8, スペース, 0x8をプログラムで組むと

『scanfを使わずに_getch()でキーボードからファイル名を入力していき、入力した文字をprintfで表示する流れについて質問です。
表示された文字をバックスペースで消していっても打ち込んだ文字は消えないですよね?
間違ったファイル名を入力してしまった際に文字が残っているので、正しく入力し直しても間違ったファイル名となってします。
一度打った文字を消す方法はありますでしょうか?


以前このような質問をさせていただき、_getch()で得た文字のキーボード上での削除の仕方は分かりました。
今度はそのやり方をプログラムで作るとしたら、どう組んでいけば良いのか教えて頂けないでしょうか。
できればそのプログラムを教えて頂けたら嬉しいです。

今現在書いてるプログラムのgetchを使っている部分です。
ファイルがオープンできたら別の処理に移行しますが、その関数は長くなるので省略しています。

#include <stdio.h>
#include <conio.h>

int main() {

int key;
int i;
char file_name[256] = { 0 };
FILE *fp;
errno_t e;

while(1)
{
i = 0;
// エンタキーが押されるまで入力を続ける
do
{
printf("%c", key);
file_name[i] = key;
key = _getch();
i++;
} while(key != 0x0d);

printf("\n");

if(e = fopen_s(&fp, file_name, "rb") != 0) {
printf("ファイルが存在しません\n");
return 0;
}
else {
// 成功したらプログラムの処理をする関数に移行
return 1;
}
}
}

『scanfを使わずに_getch()でキーボードからファイル名を入力していき、入力した文字をprintfで表示する流れについて質問です。
表示された文字をバックスペースで消していっても打ち込んだ文字は消えないですよね?
間違ったファイル名を入力してしまった際に文字が残っているので、正しく入力し直しても間違ったファイル名となってします。
一度打った文字を消す方法はありますでしょうか?


以前このような質問をさせていただき、_getch()で得た文字のキーボード上での削除の仕方は分かりました。
今度はそ...続きを読む

Aベストアンサー

#include <stdio.h>
#include <conio.h>

int main() {

int key;
int i;
char file_name[256] = { 0 };
FILE *fp;
errno_t e;

while(1)
{
i = 0;
// エンタキーが押されるまで入力を続ける
do
{
key = _getch();
if (key == '\b') { //このif文と次の行のif文を1行にまとめて
if (i) { //if ((key == '\b') && (i)) {にするとバグるので注意
printf("\b \b");
i--;
}
} else if (key != '\r') {
printf("%c", key);
file_name[i] = key;
i++;
}
file_name[i] = '\0';
} while(key != '\r');

printf("\n");

if(e = fopen_s(&fp, file_name, "rb") != 0) {
printf("ファイルが存在しません\n");
return 0;
}
else {
// 成功したらプログラムの処理をする関数に移行
return 1;
}
}
}

#include <stdio.h>
#include <conio.h>

int main() {

int key;
int i;
char file_name[256] = { 0 };
FILE *fp;
errno_t e;

while(1)
{
i = 0;
// エンタキーが押されるまで入力を続ける
do
{
key = _getch();
if (key == '\b') { //このif文と次の行のif文を1行にまとめて
if (i) { //if ((key == '\b') && (i)) {にするとバグるので注意
printf("\b \b");
i--;
}
} else if (key != '\r') {
printf("%c", key);
file_name[i] = key;
i++;
}
file_name[i] = '\0';
} while(key != '\r');

printf("\n");

if...続きを読む

QIE11からのダウングレード

Win7・IE8にてダウンロードセンターよりService Pack 1を入手しました。
トラブルも無く無事インストール出来ましたが、同時にIEが8⇒11へと三段跳びのアップグレードとなってしまいました。そこで11からいまだ未インストールの10、または9へダウングレードするにはどの様な方法が確実なのでしょうか???
宜しくお願い致します。

Aベストアンサー

IE11をアンインストールする
プログラムのアンインストール→インストールされた更新プログラムの表示

すると、以前のIEのバージョンに戻るので、IE9なりIE10なりをインストール
IE9やIE10をインストールしても、デフォルトだと最新のIEに自動配信でバージョンアップするので、IE11の自動配信無効化にするのがよいでしょう。
もし、IE9を入れてIE10を無効にしたいなら、IE10の無効化も行ってください。
IE9の無効化をしたいなら、IE9の無効化も行ってください。
IE8のままなら、IE9/10/11の自動配信の無効化をそれぞれ行ってください。

インストール方法をよくみてから行ってください

IE11自動配信無効化ツール
http://www.microsoft.com/ja-jp/download/details.aspx?id=40722
IE10自動配信無効化ツール
http://www.microsoft.com/ja-jp/download/details.aspx?id=36512
IE9自動配信無効化ツール
http://www.microsoft.com/ja-jp/download/details.aspx?id=179

IE11をアンインストールする
プログラムのアンインストール→インストールされた更新プログラムの表示

すると、以前のIEのバージョンに戻るので、IE9なりIE10なりをインストール
IE9やIE10をインストールしても、デフォルトだと最新のIEに自動配信でバージョンアップするので、IE11の自動配信無効化にするのがよいでしょう。
もし、IE9を入れてIE10を無効にしたいなら、IE10の無効化も行ってください。
IE9の無効化をしたいなら、IE9の無効化も行ってください。
IE8のままなら、IE9/10/11の自動配信の無効化をそれ...続きを読む

Qc 文字列の終わりを示すコードは 0x00 それとも '?0' , '/0' ?

cの本を参考にプログラムをかじっているのですが、
本には '?0' と書いてあり、それで出力してみるとうまくいかず
いろいろインターネットで調べたのですが、
0x00 だとうまくいきました。
良くわからないのですが、なぜでしょう?

スミマセンおねがいします。

Aベストアンサー

文字列の最後には'\0'(NULL)が必要になります。
0x00で上手くいったのは、
NULLも「整数値の0」だからです。


人気Q&Aランキング

おすすめ情報