root
This commit is contained in:
commit
74206e2982
61
c++/algorithms/P1009_string.cpp
Normal file
61
c++/algorithms/P1009_string.cpp
Normal file
@ -0,0 +1,61 @@
|
||||
//string + *
|
||||
#include<iostream>
|
||||
using namespace std;
|
||||
string operator *(string a,string b)
|
||||
{
|
||||
string c;
|
||||
int al=a.length(),bl=b.length(),cl=0;
|
||||
int *ci;
|
||||
ci=new int[al+bl+5];
|
||||
for(int i=0;i<(al+bl+5);i++)ci[i]=0;
|
||||
for(int i=0;i<al;i++) a[i]=a[i]-48;
|
||||
for(int i=0;i<bl;i++) b[i]=b[i]-48;
|
||||
|
||||
for(int j=0;j<bl;j++)
|
||||
for(int i=0;i<al;i++)
|
||||
ci[i+j]+=a[al-i-1]*b[bl-j-1];
|
||||
for(int i=0;i<(al+bl+3);i++)
|
||||
{
|
||||
ci[i+1]+=ci[i]/10;
|
||||
ci[i]%=10;
|
||||
if(ci[i+1]!=0)cl=i+1;
|
||||
}
|
||||
c.resize(cl+1);
|
||||
for(int i=0;i<=cl;i++)
|
||||
c[i]=ci[cl-i]+48;
|
||||
delete []ci;
|
||||
return c;
|
||||
}
|
||||
string operator+(string a,string b)
|
||||
{
|
||||
string c;
|
||||
int al=a.length(),bl=b.length(),cl=0;
|
||||
int l=al>bl?al:bl;
|
||||
c.resize(l+3);
|
||||
for(int i=0;i<al;i++)a[i]=a[i]-48;//string转int
|
||||
for(int i=0;i<bl;i++)b[i]=b[i]-48;
|
||||
for(int i=0;i<(l+3);i++)c[i]=0;//c初始化
|
||||
for(int i=0;i<l;i++)//加法计算核心
|
||||
{
|
||||
if((al-i-1)>=0)c[i]=a[al-i-1]+c[i];
|
||||
if((bl-i-1)>=0)c[i]=b[bl-i-1]+c[i];
|
||||
}
|
||||
for(int i=0;i<(l+2);i++)//处理进位
|
||||
{
|
||||
c[i+1]+=c[i]/10;
|
||||
if(c[i+1]!=0)cl=i+1;
|
||||
c[i]=c[i]%10+48;
|
||||
}
|
||||
if(c[cl]<10)c[cl]+=48;
|
||||
char t; //c反转
|
||||
for(int i=0;i<=cl/2;i++){t=c[i];c[i]=c[cl-i];c[cl-i]=t;}
|
||||
c.resize(cl+1);
|
||||
return c;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
string a,b;
|
||||
cin>>a>>b;
|
||||
cout<<a*b;
|
||||
return 0;
|
||||
}
|
55
c++/algorithms/P3347_mod_BinaryIndexedTrees.cpp
Normal file
55
c++/algorithms/P3347_mod_BinaryIndexedTrees.cpp
Normal file
@ -0,0 +1,55 @@
|
||||
//Copyright(c) 2024 e0x1a&ly. All right reserved.
|
||||
#include<iostream>
|
||||
#include<vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
void init(vector<int> &a)
|
||||
{
|
||||
for(int i=1; i < a.size(); i++)
|
||||
{
|
||||
int lowbit=(i & -i)>>1;
|
||||
while(lowbit)
|
||||
{
|
||||
a[i]+=a[i-lowbit];
|
||||
lowbit=lowbit>>1;
|
||||
}
|
||||
}
|
||||
}
|
||||
void add(int x,int k,vector<int> &a)
|
||||
{
|
||||
for(; x < a.size(); x+=(x & -x)) a[x]+=k;
|
||||
}
|
||||
int ask(int x,vector<int> &a)
|
||||
{
|
||||
int ans=0;
|
||||
while(x) { ans+=a[x];x-=(x & -x);}
|
||||
return ans;
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
//data init
|
||||
int n,m,temp;
|
||||
vector<int>a;a.push_back(0);
|
||||
scanf("%d%d",&n,&m);
|
||||
for(int i=0;i<n;++i)
|
||||
{
|
||||
scanf("%d",&temp);
|
||||
a.push_back(temp);
|
||||
}
|
||||
init(a);
|
||||
|
||||
|
||||
while(m--) //在线操作
|
||||
{
|
||||
int x,y;
|
||||
scanf("%d%d%d",&temp,&x,&y);
|
||||
if(temp==1)
|
||||
add(x,y,a);
|
||||
else printf("%d\n",ask(y,a)-ask(x-1,a));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
37
c++/algorithms/P3865_st.cpp
Normal file
37
c++/algorithms/P3865_st.cpp
Normal file
@ -0,0 +1,37 @@
|
||||
#include<bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
int f[100001][30],n,m;
|
||||
|
||||
void init(int n)//计算区间预处理
|
||||
{
|
||||
for(int i = 1;1<<i <= n;i++)
|
||||
for(int j = 1;(j+(1<<i)-1) <= n;j++)
|
||||
//f[j][i] = max(f[j][i-1],f[j+(1<<(i-1))][i-1]);
|
||||
{int k=i-1;f[j][i] = f[j][k]>f[j+(1<<(k))][k] ? f[j][k] : f[j+(1<<(k))][k];}
|
||||
}
|
||||
inline int query(int L,int R)//查询
|
||||
{
|
||||
int s = log2(R-L+1);
|
||||
//return max(f[L][s],f[R-(1<<s)+1][s]);
|
||||
return f[L][s]>f[R-(1<<s)+1][s] ? f[L][s] : f[R-(1<<s)+1][s];
|
||||
}
|
||||
inline int read()//快读int
|
||||
{
|
||||
int data=0;bool n=false;char ch;
|
||||
while(1){if((ch=getchar())==EOF)return -1;if(!isdigit(ch)){if(n==true)break;else continue;}n=true;data=data*10+(int)(ch-48);}
|
||||
return data;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
cin>>n>>m;
|
||||
for(int i = 1;i <= n;i++)f[i][0]=read();//读入数据
|
||||
init(n);
|
||||
int L,R;
|
||||
while(m--)
|
||||
{
|
||||
L=read();R=read();
|
||||
printf("%d\n",query(L,R));
|
||||
}
|
||||
return 0;
|
||||
}
|
24
c++/algorithms/P5723_zhishu.cpp
Normal file
24
c++/algorithms/P5723_zhishu.cpp
Normal file
@ -0,0 +1,24 @@
|
||||
#include<iostream>
|
||||
using namespace std;
|
||||
bool zs(int a)
|
||||
{
|
||||
for(int i=2;i*i<=a;i++)if(a%i==0)return false;
|
||||
return true;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
int l,max=0;
|
||||
cin>>l;
|
||||
for(int i=2;l<i;i++)
|
||||
{
|
||||
if(zs(i))
|
||||
{
|
||||
cout<<i<<endl;
|
||||
l=l-i;
|
||||
cout<<l<<endl;
|
||||
max++;
|
||||
}
|
||||
}
|
||||
cout<<max;
|
||||
return 0;
|
||||
}
|
26
c++/algorithms/main.cpp
Normal file
26
c++/algorithms/main.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
// Copyright (c) 2024 ely. All rights reserved.
|
||||
|
||||
#include<iostream>
|
||||
#include<cstdio>
|
||||
#include<cmath>
|
||||
#include<time.h>
|
||||
#include<cstring>
|
||||
#include<vector>
|
||||
#include<fstream>
|
||||
#include<algorithm>
|
||||
|
||||
using namespace std;
|
||||
|
||||
inline int read()//快读int
|
||||
{
|
||||
int data=0;char ch;
|
||||
while(1){ch=getchar();if(ch<'0' || ch>'9'){if(data!=0)break;}else data=data*10+(int)(ch-48);}
|
||||
return data;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
// freopen("in","r",stdin);
|
||||
// ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
|
||||
return 0;
|
||||
}
|
111
c++/algorithms/xds_mod.cpp
Normal file
111
c++/algorithms/xds_mod.cpp
Normal file
@ -0,0 +1,111 @@
|
||||
// Copyright (c) 2024 e0x1a.ly. All rights reserved.
|
||||
#include<iostream>
|
||||
using namespace std;
|
||||
class Node
|
||||
{
|
||||
public:
|
||||
Node(){c_l=c_r=c_max=c_sum=c_lag=0;tl=NULL;tr=NULL;}
|
||||
|
||||
void build(int *arr,int l,int r)
|
||||
{
|
||||
c_l=l;c_r=r;
|
||||
if(l==r) {c_max=arr[l];c_sum=arr[l];}
|
||||
else {
|
||||
tl=new Node;tr=new Node;
|
||||
tl->build(arr,l,(l+r)/2);
|
||||
tr->build(arr,(l+r)/2+1,r);
|
||||
c_max = tl->c_max > tr->c_max ? tl->c_max:tr->c_max;
|
||||
c_sum = tl->c_sum + tr->c_sum;
|
||||
}
|
||||
}
|
||||
|
||||
void print(int cnt=1)
|
||||
{
|
||||
printf("%5d---%5d---%5d\n",cnt,c_max,c_sum);
|
||||
if(c_l != c_r)
|
||||
{
|
||||
tl->print(cnt+1);
|
||||
tr->print(cnt+1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int ask_max(int l,int r)
|
||||
{
|
||||
if(c_l >= l && c_r <= r)
|
||||
return c_max;
|
||||
int t_max1=0,t_max2=0;
|
||||
if((c_l+c_r)/2 < r) t_max1=tr->ask_max(l,r);
|
||||
if((c_l+c_r)/2+1 > l) t_max2=tl->ask_max(l,r) ;
|
||||
return t_max1 > t_max2 ? t_max1 : t_max2;
|
||||
}
|
||||
|
||||
int ask_sum(int l,int r)
|
||||
{
|
||||
if(c_l >= l && c_r <= r)
|
||||
return c_sum;
|
||||
int t_sum1=0,t_sum2=0;
|
||||
if((c_l+c_r)/2 < r) t_sum1=tr->ask_sum(l,r);
|
||||
if((c_l+c_r)/2+1 > l) t_sum2=tl->ask_sum(l,r) ;
|
||||
return t_sum1 + t_sum2;
|
||||
}
|
||||
|
||||
void change(int x,int value)
|
||||
{
|
||||
if(c_l == x && c_r == x)
|
||||
c_max=c_sum=value;
|
||||
else {
|
||||
if((c_l+c_r)/2+1 >x) tl->change(x,value);
|
||||
else tr->change(x,value);
|
||||
c_max = tl->c_max > tr->c_max ? tl->c_max:tr->c_max;
|
||||
c_sum = tl->c_sum + tr->c_sum;
|
||||
}
|
||||
}
|
||||
|
||||
void add(int l,int r,int value)
|
||||
{
|
||||
if(c_l >= l && c_r <= r)
|
||||
{
|
||||
if(c_l==c_r)
|
||||
c_sum=c_max+=value;
|
||||
else {
|
||||
c_lag+=value;
|
||||
}
|
||||
} else if(c_l != c_r){
|
||||
if(l <= (c_l+c_r)/2) tl->add(l,r,value);
|
||||
if(r > (c_l+c_r)/2) tr->add(l,r,value);
|
||||
c_max = tl->c_max > tr->c_max ? tl->c_max:tr->c_max;
|
||||
c_sum = tl->c_sum + tr->c_sum;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
int c_l,c_r,c_max,c_sum,c_lag;
|
||||
Node *tl,*tr;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
Node s;
|
||||
int *arr,n;
|
||||
cin>>n;
|
||||
arr=new int[n+1];arr[0]=n;
|
||||
for(int i=1;i<(n+1);i++)
|
||||
cin>>arr[i];
|
||||
s.build(arr,1,n);
|
||||
s.print();
|
||||
while(1)
|
||||
{
|
||||
int x,y,v;
|
||||
cin>>n;
|
||||
if(!n)break;
|
||||
switch(n)
|
||||
{
|
||||
case 1: cin>>x>>y;s.change(x,y);break;
|
||||
case 2: cin>>x>>y;cout<<s.ask_max(x,y)<<endl;break;
|
||||
case 3: cin>>x>>y>>v;s.add(x,y,v);break;
|
||||
case 4: cin>>x>>y;cout<<s.ask_sum(x,y)<<endl;break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
23
c++/linux/dir.cpp
Normal file
23
c++/linux/dir.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include<iostream>
|
||||
#include<unistd.h>
|
||||
#include<dirent.h>
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
char buf[255];
|
||||
if(getcwd(buf, 255) == NULL)
|
||||
cout << "error" << endl;
|
||||
else cout << buf << endl;
|
||||
|
||||
DIR *ddir;
|
||||
if((ddir = opendir(buf)) == NULL)
|
||||
cout << "error" << endl;
|
||||
|
||||
struct dirent* entry;
|
||||
while((entry = readdir(ddir)) != NULL)
|
||||
cout << entry->d_name << endl;
|
||||
closedir(ddir);
|
||||
|
||||
return 0;
|
||||
}
|
153
c++/linux/fork
Normal file
153
c++/linux/fork
Normal file
@ -0,0 +1,153 @@
|
||||
在Linux系统中,`fork` 是一个系统调用,用于创建一个新的进程,这个新进程是调用进程的一个副本。这个新进程被称为子进程,而调用进程被称为父进程。`fork` 调用在父进程中返回子进程的PID(进程标识符),而在子进程中返回0。
|
||||
|
||||
以下是使用 `fork` 函数的基本步骤:
|
||||
1. **包含头文件**:使用 `fork` 函数之前,需要包含 `<unistd.h>` 头文件。
|
||||
2. **调用 fork**:在代码中调用 `fork()` 函数。
|
||||
3. **检查返回值**:`fork()` 调用会返回一个整数。如果返回值为正数,表示在父进程中,返回的值是子进程的PID。如果返回值为0,表示在子进程中。如果返回值为-1,表示创建进程失败。
|
||||
4. **父进程和子进程的执行流程**:在 `fork()` 调用之后,根据返回值判断当前是在父进程还是子进程,并执行相应的代码。
|
||||
|
||||
下面是一个简单的示例代码,展示了如何使用 `fork`:
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
int main() {
|
||||
pid_t pid = fork(); // 创建子进程
|
||||
|
||||
if (pid < 0) {
|
||||
// fork失败
|
||||
fprintf(stderr, "Fork failed");
|
||||
return 1;
|
||||
} else if (pid == 0) {
|
||||
// 子进程
|
||||
printf("I'm the child process with PID: %d\n", getpid());
|
||||
} else {
|
||||
// 父进程
|
||||
printf("I'm the parent process with PID: %d, and my child is %d\n", getpid(), pid);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
当使用 `fork` 系统调用创建子进程时,子进程会继承父进程的许多资源。以下是父子进程共享的一些主要资源:
|
||||
|
||||
1. **文件描述符**:子进程会继承父进程打开的所有文件描述符。这意味着子进程可以访问父进程打开的文件和设备。
|
||||
2. **环境变量**:子进程继承父进程的环境变量,包括语言设置、路径变量等。
|
||||
3. **内存空间**:子进程会复制父进程的地址空间,包括代码段、数据段和堆栈。但是,子进程的堆栈是独立的,这意味着局部变量和函数调用栈是分开的。
|
||||
4. **信号处理器**:子进程继承父进程的信号处理器设置。
|
||||
5. **挂起信号集**:子进程继承父进程的挂起信号集。
|
||||
6. **资源限制**:子进程继承父进程的资源限制,如CPU时间、文件大小限制等。
|
||||
7. **进程组ID**:子进程继承父进程的进程组ID。
|
||||
8. **用户ID和组ID**:子进程继承父进程的用户ID和组ID。
|
||||
9. **工作目录**:子进程继承父进程的工作目录。
|
||||
10. **根目录**:子进程继承父进程的根目录。
|
||||
11. **能力**:子进程继承父进程的文件系统能力。
|
||||
12. **内核定时器**:如果父进程有设置内核定时器,子进程也会继承。
|
||||
13. **锁**:子进程继承父进程持有的文件锁。
|
||||
14. **共享内存段**:如果父进程使用了共享内存,子进程也会继承这些共享内存段。
|
||||
15. **网络连接**:子进程继承父进程的网络连接。
|
||||
|
||||
然而,有一些资源是独立的,例如:
|
||||
- **进程ID**:子进程有自己的唯一进程ID。
|
||||
- **线程特定数据**:每个线程有自己的线程特定数据,子进程不会继承父进程的线程特定数据。
|
||||
- **CPU寄存器**:除了程序计数器和其他一些寄存器外,子进程的CPU寄存器状态是复制自父进程的,但子进程可以独立修改它们。
|
||||
|
||||
|
||||
在 `fork` 之后,通常使用 `exec` 系列函数来替换子进程的映像,这样可以避免共享不必要的资源,并且可以运行一个完全不同的程序。此外,使用 `fork` 时需要注意资源的同步和清理,以避免潜在的资源竞争和泄漏问题。
|
||||
下面是一个详细的示例代码,展示了如何在C语言中使用 `fork` 系统调用,并演示了父子进程共享资源的基本概念:
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
int main() {
|
||||
pid_t pid = fork(); // 创建子进程
|
||||
|
||||
if (pid < 0) {
|
||||
// fork失败
|
||||
exit(EXIT_FAILURE);
|
||||
} else if (pid == 0) {
|
||||
// 子进程
|
||||
// 子进程可以继续使用父进程打开的文件描述符
|
||||
// 例如,这里我们尝试写入标准输出
|
||||
printf("Hello from the child process!\n");
|
||||
|
||||
// 子进程可以修改父进程传递给它的变量的值,但这些修改不会影响父进程
|
||||
int child_value = 42;
|
||||
printf("Child value: %d\n", child_value);
|
||||
} else {
|
||||
// 父进程
|
||||
// 父进程可以等待子进程结束
|
||||
int status;
|
||||
wait(&status); // 等待子进程结束
|
||||
|
||||
// 检查子进程是否正常退出
|
||||
if (WIFEXITED(status)) {
|
||||
printf("Child exited with status %d\n", WEXITSTATUS(status));
|
||||
}
|
||||
}
|
||||
|
||||
// 父进程和子进程都可以访问这个变量,但它们有自己的副本
|
||||
// 这里我们演示父进程的值不会影响子进程
|
||||
int shared_variable = 10;
|
||||
printf("Parent shared variable: %d\n", shared_variable);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
在这个示例中:
|
||||
|
||||
- 我们首先调用 `fork()` 来创建一个新的子进程。
|
||||
- 如果 `fork()` 返回一个负值,表示创建进程失败,我们打印错误消息并退出。
|
||||
- 如果 `fork()` 返回0,表示当前是在子进程中。子进程打印自己的PID和PPID(父进程ID),并写入标准输出。
|
||||
- 如果 `fork()` 返回一个正值,表示当前是在父进程中。父进程打印自己的PID和PPID,并等待子进程结束。
|
||||
- 使用 `wait()` 函数可以让父进程挂起,直到子进程结束。`wait()` 函数还可以获取子进程的退出状态。
|
||||
- 我们定义了一个 `shared_variable` 变量,并在父进程和子进程中分别打印它的值。由于子进程的栈是独立的,所以子进程中的修改不会影响父进程中的 `shared_variable`。
|
||||
|
||||
|
||||
在使用 `fork` 系统调用创建子进程时,通常会结合其他一些系统调用或库函数来实现特定的功能。以下是一些与 `fork` 相关的常用函数:
|
||||
|
||||
1. **exec 系列函数**:
|
||||
- `execl(const char *path, const char *arg0, ..., NULL)`
|
||||
- `execv(const char *path, char *const argv[])`
|
||||
- `execle(const char *path, const char *arg0, ..., NULL, char *const envp[])`
|
||||
- `execve(const char *path, char *const argv[], char *const envp[])`
|
||||
- `execlp(const char *file, const char *arg0, ..., NULL)`
|
||||
- `execvp(const char *file, char *const argv[])`
|
||||
这些函数用于在子进程中执行一个新的程序,替换当前的进程映像。
|
||||
|
||||
2. **wait 和 waitpid 函数**:
|
||||
- `wait(int *status)`
|
||||
- `waitpid(pid_t pid, int *status, int options)`
|
||||
这些函数用于父进程等待子进程结束。`wait` 函数等待任何一个子进程结束,而 `waitpid` 可以指定等待特定的子进程。
|
||||
|
||||
3. **_exit 和 exit 函数**:
|
||||
- `_exit(int status)`
|
||||
- `exit(int status)`
|
||||
这两个函数用于终止进程。`_exit` 立即终止进程,不进行任何清理工作;`exit` 在终止进程前会执行一些清理工作,如关闭标准I/O流、刷新缓冲区等。
|
||||
|
||||
4. **getpid 和 getppid 函数**:
|
||||
- `pid_t getpid(void)`
|
||||
- `pid_t getppid(void)`
|
||||
`getpid` 返回调用进程的PID,`getppid` 返回调用进程的父进程PID。
|
||||
|
||||
8. **signal 和 sigaction 函数**:
|
||||
- `int signal(int signum, void (*handler)(int))`
|
||||
- `int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)`
|
||||
这些函数用于设置信号处理器,处理进程接收到的信号。
|
||||
|
||||
9. **kill 函数**:
|
||||
- `int kill(pid_t pid, int sig)`
|
||||
`kill` 函数用于向指定的进程发送信号。
|
||||
|
||||
10. **setsid 函数**:
|
||||
- `pid_t setsid(void)`
|
||||
`setsid` 用于创建一个新的会话,并使调用进程成为该会话的领头进程。
|
||||
|
||||
这些函数在进程管理、信号处理、资源管理等方面起着重要作用,与 `fork` 结合使用可以实现复杂的进程间操作和通信。
|
63
c++/linux/linux.h
Normal file
63
c++/linux/linux.h
Normal file
@ -0,0 +1,63 @@
|
||||
以下是一些常见的linux系统头文件:
|
||||
|
||||
1. **`stdio.h`** - 标准输入输出函数,如 `printf`、`scanf`、`fopen`、`fclose` 等。
|
||||
|
||||
2. **`stdlib.h`** - 标准库函数,如 `malloc`、`free`、`rand`、`exit` 等。
|
||||
|
||||
3. **`string.h`** - 字符串操作函数,如 `strcpy`、`strlen`、`strcat` 等。
|
||||
|
||||
4. **`errno.h`** - 定义错误码。
|
||||
|
||||
5. **`limits.h`** - 定义各种数据类型的最大值和最小值。
|
||||
|
||||
6. **`fcntl.h`** - 文件控制选项,用于文件描述符的操作。
|
||||
|
||||
7. **`sys/types.h`** - 包含数据类型定义,如 `size_t`、`off_t` 等。
|
||||
|
||||
8. **`sys/stat.h`** - 文件状态信息和文件控制操作。
|
||||
|
||||
9. **`sys/time.h`** - 时间相关的系统调用和结构。
|
||||
|
||||
10. **`sys/resource.h`** - 资源限制和优先级设置。
|
||||
|
||||
11. **`sys/wait.h`** - 进程等待和状态查询。
|
||||
|
||||
12. **`sys/ioctl.h`** - 设备控制操作。
|
||||
|
||||
13. **`sys/socket.h`** - 提供套接字接口。
|
||||
|
||||
14. **`netinet/in.h`** - 提供网络通信所需的数据结构和宏。
|
||||
|
||||
15. **`arpa/inet.h`** - 提供网络地址转换函数。
|
||||
|
||||
16. **`netdb.h`** - 网络数据库操作。
|
||||
|
||||
17. **`signal.h`** - 信号处理。
|
||||
|
||||
18. **`setjmp.h`** - 非局部跳转。
|
||||
|
||||
19. **`time.h`** - 时间和日期函数。
|
||||
|
||||
20. **`pthread.h`** - POSIX 线程库。
|
||||
|
||||
21. **`dlfcn.h`** - 动态链接函数。
|
||||
|
||||
22. **`dirent.h`** - 目录操作。
|
||||
|
||||
23. **`grp.h`** - 组数据库操作。
|
||||
|
||||
24. **`pwd.h`** - 密码数据库操作。
|
||||
|
||||
25. **`termios.h`** - 终端控制。
|
||||
|
||||
26. **`sys/mman.h`** - 内存管理。
|
||||
|
||||
27. **`sys/shm.h`** - 共享内存。
|
||||
|
||||
28. **`sys/ipc.h`** - 进程间通信。
|
||||
|
||||
29. **`sys/msg.h`** - 消息队列。
|
||||
|
||||
30. **`sys/sem.h`** - 信号量。
|
||||
|
||||
这些头文件为 C 语言程序提供了与操作系统交互的接口。不同的程序可能会根据需要包含不同的头文件。
|
65
c++/net/1.cpp
Normal file
65
c++/net/1.cpp
Normal file
@ -0,0 +1,65 @@
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
//#include <cstdlib>
|
||||
#include <unistd.h>
|
||||
#include <netdb.h>
|
||||
//#include <sys/types.h>
|
||||
//#include <sys/socket.h>
|
||||
//#include <arpa/inet.h>
|
||||
using namespace std;
|
||||
|
||||
int net_send(char *argv[], char *buffer) {
|
||||
if(strlen(buffer) > 1024) {
|
||||
cout << "字符串长度超出限制" << endl; return -1;
|
||||
}
|
||||
|
||||
// 创建客户端socket
|
||||
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if(sockfd == -1) {
|
||||
cout << "socket创建失败" << endl; return -1;
|
||||
}
|
||||
// 向服务端请求连接
|
||||
struct hostent* h;
|
||||
if( (h = gethostbyname(argv[1])) == 0) {
|
||||
cout << "地址不正确" << endl; close(sockfd); return -1;
|
||||
}
|
||||
struct sockaddr_in servaddr;
|
||||
memset(&servaddr, 0, sizeof(servaddr));
|
||||
servaddr.sin_family = AF_INET;
|
||||
servaddr.sin_port = htons(atoi(argv[2])); //指定连接端口
|
||||
memcpy(&servaddr.sin_addr, h->h_addr, h->h_length);
|
||||
if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != 0) { //发起连接请求
|
||||
cout << "连接失败" << endl; close(sockfd); return -1;
|
||||
}
|
||||
|
||||
// 客户端通信
|
||||
if(send(sockfd, buffer, strlen(buffer), 0) <= 0) { //发送请求报文
|
||||
cout << "请求报文发送不成功" << endl; return -1;
|
||||
}
|
||||
|
||||
//接收服务端回应报文, recv()将阻塞等待
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
if(recv(sockfd, buffer, sizeof(buffer), 0) <= 0) {
|
||||
cout << "服务器断开--未成功接收回应报文" << endl; return -1;
|
||||
}
|
||||
// 回应报文
|
||||
cout << buffer << endl;
|
||||
|
||||
//关闭连接
|
||||
close(sockfd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if(argc != 3) {
|
||||
cout << "参数不正确" << endl; return -1;
|
||||
}
|
||||
|
||||
char buffer[1024];
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
cout << "input data : ";
|
||||
fgets(buffer, sizeof(buffer), stdin);
|
||||
net_send(argv, buffer);
|
||||
|
||||
return 0;
|
||||
}
|
73
c++/net/2.cpp
Normal file
73
c++/net/2.cpp
Normal file
@ -0,0 +1,73 @@
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
//#include <cstdlib>
|
||||
#include <unistd.h>
|
||||
#include <netdb.h>
|
||||
//#include <sys/types.h>
|
||||
//#include <sys/socket.h>
|
||||
//#include <arpa/inet.h>
|
||||
using namespace std;
|
||||
int handling(char *buffer) { // 数据处理函数
|
||||
if(strcmp(buffer, "off\n") == 0) {
|
||||
cout << "服务端指令关闭服务器" << endl; return -1;
|
||||
}
|
||||
cout << "成功接收" << endl << buffer << endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if(argc != 2) {
|
||||
cout << "参数不正确" << endl; return -1;
|
||||
}
|
||||
|
||||
// 创建服务端socket
|
||||
int listenfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if(listenfd == -1) {
|
||||
cout << "socket创建失败" << endl; return -1;
|
||||
}
|
||||
|
||||
// 向客户端请求连接
|
||||
struct sockaddr_in servaddr;
|
||||
memset(&servaddr, 0, sizeof(servaddr));
|
||||
servaddr.sin_family = AF_INET;
|
||||
servaddr.sin_addr.s_addr = htons(INADDR_ANY);
|
||||
servaddr.sin_port = htons(atoi(argv[1])); //指定连接端口
|
||||
// 绑定服务端IP及端口
|
||||
if(bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != 0) {
|
||||
cout << "端口未成功绑定" << endl; close(listenfd); return -1;
|
||||
}
|
||||
|
||||
// 把端口设为监听
|
||||
if(listen(listenfd, 5) != 0) {
|
||||
cout << "端口无法监听" << endl; close(listenfd); return -1;
|
||||
}
|
||||
|
||||
// 受理客户端连接请求, accept()阻塞等待
|
||||
int clistenfd;
|
||||
while(true) {
|
||||
clistenfd = accept(listenfd, 0, 0);
|
||||
if(clistenfd == -1) {
|
||||
cout << "未正常受理连接" << endl; close(listenfd); return -1;
|
||||
}
|
||||
cout << "客户端已连接" << endl;
|
||||
|
||||
//与客户端通信
|
||||
char buffer[1024];
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
if(recv(clistenfd, buffer, sizeof(buffer), 0) <= 0) { // 接受服务端报文
|
||||
cout << "客户端连接已断开" << endl; break;
|
||||
}
|
||||
if(handling(buffer) == -1) break; //对接受数据进行处理
|
||||
|
||||
// 发送回应报文
|
||||
strcpy(buffer, "OK");
|
||||
if(send(clistenfd, buffer, strlen(buffer), 0) <= 0) {
|
||||
cout << "发送回应报文失败" << endl; break;
|
||||
}
|
||||
}
|
||||
|
||||
//关闭连接
|
||||
close(clistenfd);
|
||||
close(listenfd);
|
||||
return 0;
|
||||
}
|
5
c++/net/makefile
Normal file
5
c++/net/makefile
Normal file
@ -0,0 +1,5 @@
|
||||
main: 1.cpp 2.cpp
|
||||
g++ -o 1.out 1.cpp
|
||||
g++ -o 2.out 2.cpp
|
||||
clear:
|
||||
rm *.out
|
110
c++/net/note
Normal file
110
c++/net/note
Normal file
@ -0,0 +1,110 @@
|
||||
```cpp
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include <unistd.h>
|
||||
#include <netdb.h>
|
||||
#include <cstdlib>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
```
|
||||
|
||||
# tips
|
||||
+ 所有网络函数失败基本是返回 -1,errno被设置
|
||||
|
||||
# socket
|
||||
|
||||
|
||||
原型: int socket(int domain, int type, int protocol)
|
||||
|
||||
+ domain 协议族
|
||||
\ PF_INET # IPv4 互联网协议族
|
||||
\ PF_INET6 # IPv6 互联网协议族
|
||||
\ PF_LOCAL # 本地通讯地址族
|
||||
|
||||
+ type 数据传输类型
|
||||
\ SOCK_STREAM # 面向连接; 数据不丢失; 数据顺序不错乱; 双向通道;
|
||||
\ SOCK_DGRAM # 无连接; 数据可能丢; 数据可能错乱; 效率高;
|
||||
|
||||
+ protocol 最终使用协议
|
||||
\ IPPROTO_TCP
|
||||
\ IPPROTO_UDP
|
||||
\ 0 # 编译器自动识别
|
||||
|
||||
# 主机字节序和网络字节序
|
||||
|
||||
+ 大端序和小端序 (如果数据大于1B,CPU在内存中存放数据的方式)
|
||||
\ 大端序 低位字节在高位,高位字节在低位
|
||||
\ 小端序 低位字节在低位,高位字节在高位 (INTEL)
|
||||
|
||||
## 字节序不同的系统字节传输数据,可能会出现问题,所以网络字节序约定使用大端序
|
||||
+ c提供了4个库用于主机字节序和网络字节序之间的转换
|
||||
\ uint16_t htons(uint16_t hostshort); // 2字节的整数
|
||||
\ uint32_t htonl(uint32_t hostshort); // 4字节的整数
|
||||
\ uint16_t ntons(uint16_t netshort); // 2字节的整数
|
||||
\ uint32_t ntonl(uint32_t netshort); // 4字节的整数
|
||||
// h host主机
|
||||
// to 转换
|
||||
// n network网络
|
||||
// s short(2byte)
|
||||
// l long(4byte)
|
||||
|
||||
# IP地址和通讯端口
|
||||
+ IPv4(4byte) 端口(2byte)
|
||||
|
||||
# 大小端序的处理
|
||||
+ 在网络编程中数据收发有自动转换,只有sockaddr_in结构成员变量填充数据时,才需要考虑字节序
|
||||
|
||||
# 结构体
|
||||
|
||||
## sockaddr
|
||||
```cpp
|
||||
struct sockaddr { // connect() bind() 都需要
|
||||
unsigned short sa_family; // 协议族
|
||||
unsigned char sa_data[14]; // 14byte的端口和地址
|
||||
}
|
||||
```
|
||||
|
||||
## sockaddr_in
|
||||
```cpp
|
||||
struct sockaddr { // 为了方便操作,大小与sockaddr相同,可以强制转换
|
||||
unsigned short sin_family; // 协议族
|
||||
unsigned short sin_port; // 2byte端口号
|
||||
//struct in_addr sin_addr; // 4byte地址
|
||||
unsigned int sin_addr; // 4byte地址
|
||||
unsigned char sin_zero[8]; // 保留,长度对齐
|
||||
}
|
||||
```
|
||||
|
||||
# gethostbyname函数
|
||||
|
||||
+ 用 域名/主机名/字符串IP 转换成大端序
|
||||
```cpp
|
||||
struct hostent *gethostbyname(const char *name);
|
||||
struct hostent {
|
||||
char *h_name; // 主机名
|
||||
char **h_aliases; // 主机所有别名的字符串数组
|
||||
short h_addrtype; // 主机IP类型,IPv4或IPv6
|
||||
short h_length; // 主机IP长度
|
||||
char **h_addr_list; // 主机IP地址,以网络字节序存储
|
||||
}
|
||||
#define h_addr h_addr_list[0]
|
||||
|
||||
// 转换后,用 memcpy(&servaddr.sin_addr, h->h_addr, h->h_length);
|
||||
```
|
||||
|
||||
# 字符串IP和大端序IP的转换
|
||||
## atoi() 把字符串IP转换成大端序
|
||||
```cpp
|
||||
typedef unsigned int in_addr_t; //4byte大端序IP
|
||||
|
||||
// 字符串转大端序IP,转换后IP赋给sockaddr_in.in_addr.s_addr
|
||||
in_addr_t inet_addr(const char *cp);
|
||||
|
||||
// 字符串转大端序IP,转换后IP赋给sockaddr_in.in_addr
|
||||
int inet_aton(const char *cp, struct in_addr *inp);
|
||||
|
||||
//大转字符串,用于服务端解析IP
|
||||
char *inet_ntoa(struct in_addr in);
|
||||
```
|
||||
|
25
c++/tool/g++
Normal file
25
c++/tool/g++
Normal file
@ -0,0 +1,25 @@
|
||||
g++ -S test.s test.cpp #编译成汇编文件
|
||||
g++ -c test.o test.s #目标文件
|
||||
g++ -o test test.o #链接
|
||||
|
||||
|
||||
#静态库制作:
|
||||
g++ -c -o libtest.a {test.cpp 源代码文件清单}
|
||||
// g++ -c test.cpp
|
||||
// ar -crv libtest.a test.o
|
||||
|
||||
|
||||
#动态库制作
|
||||
g++ -fPIC -shared -o libtest.so {test.cpp 源代码文件清单}
|
||||
// g++ -fPIC -c test.cpp
|
||||
// g++ -shared -o libtest.so tset.o
|
||||
两种方法
|
||||
1 + .so 放到 /usr/lib 或 /lib
|
||||
2 + 路径放到/etc/ld.so.conf 运行ldconfd 重建/etc/ld.so.cache
|
||||
|
||||
# 库使用
|
||||
g++ -o main -l库名 -L库路径
|
||||
// g++ -o main -ltest -L/home/e0x1a/test
|
||||
|
||||
如果是动态库,需要指定 LD_LIBRARY_PATH 环境变量 //待查
|
||||
用 echo $LD_LIBRARY_PATH 查看
|
112
c++/universal/IO.txt
Normal file
112
c++/universal/IO.txt
Normal file
@ -0,0 +1,112 @@
|
||||
一、输入输出流的概念
|
||||
在C++中,输入输出是同流来完成的。C++的输出操作将一个对象的状态转换成一个字符序列,输出到某个地方。
|
||||
输入操作也是从某个地方接收到一个字符序列,然后将其转换成一个对象的状态所要求的格式。
|
||||
这看起来很像数据在流动,于是把接收输出数据的地方叫做目标,把输入数据来自的地方叫做源。
|
||||
而输入和输出操作可以看成字符序列在源、目标以及对象之间的流动。
|
||||
二、文件流的概念
|
||||
在C++里,文件操作是通过流来完成的。C++总共有输入文件流、输出文件流和输入输出文件流3种,并已将它们标准化。
|
||||
1、要打开一个输入文件流,需要定义一个 ifstream类型的对象。->Input-stream
|
||||
2、要打开一个输出文件流,需要定义一个 ofstream类型的对象。->Ouput-stream
|
||||
3、如果要打开输入输出文件流,则要定义一个 fstream类型的对象。->File-stream
|
||||
这3种类型都定义在头文件 fstream 里。
|
||||
一个输出流对象是信息流动的目标,ofstream是最重要的输出流。
|
||||
一个输入流对象是数据流动的源头,ifstream是最重要的输入流。
|
||||
一个iostream对象可以是数据流动的源或目标,fstream就是从它派生的。
|
||||
三、文件操作
|
||||
可以总结出对文件进行操作的方法如下:
|
||||
(1)包含头文件 <fstream>
|
||||
(2)创建一个流对象
|
||||
(3)将这个流和相应的文件关联起来
|
||||
#include<iostream>
|
||||
#include<fstream> //1、包含输入输出流头文件
|
||||
using namespace std;
|
||||
void outstream(){
|
||||
ofstream ofs; //2、打开一个相应的文件流
|
||||
ofs.open("mytest.txt"); //3、流与文件关联上
|
||||
};
|
||||
int main(){
|
||||
|
||||
return 0;
|
||||
}
|
||||
因为ifstream、ofstream和fstream这3个类都具有自动打开文件的构造函数,而这个构造函数就具有 open() 的功能。
|
||||
|
||||
因此,我们可以在创建流对象的时候就可以关联文件:ofstream myStream("myText.txt");
|
||||
|
||||
(4)操作文件流 👇
|
||||
|
||||
1、文本文件
|
||||
1.1、写文件
|
||||
注意:
|
||||
我们在写文件的时候如果打开的文件不存在或者路径错误那么会自动生成一个文件!!!
|
||||
|
||||
open函数的原型如下:
|
||||
void open(char const *,int filemode,int =filebuf::openprot);
|
||||
它有3个参数,第1个是要打开的文件名,第2个是文件的打开方式,第3个是文件的保护方式,一般都使用默认值。
|
||||
第2个参数可以取如下所示的值:
|
||||
打开方式 解释
|
||||
ios::in 打开文件进行读操作,这种方式可避免删除现存文件的内容
|
||||
ios::out 打开文件进行写操作,这是默认模式
|
||||
ios::ate 打开一个已有的输入或输出文件并查找到文件尾开始
|
||||
ios::app 在文件尾追加方式写文件
|
||||
ios::binary 指定文件以二进制方式打开,默认为文本方式
|
||||
ios::trunc 如文件存在,将其长度截断为零并清除原有内容,如果文件存在先删除,再创建
|
||||
除ios_base::app方式之外,在其他几种方式下,文件刚刚打开,是指示当前读写位置的文件指针都定位于文件的开始位置,而ios_base::app使文件当前的写指针定位于文件尾。这几种方式也可以通过 “或” 运算符 “|” 同时使用
|
||||
|
||||
如果指定文件路径,路径中的“\”号必须使用转义字符表示。
|
||||
案例:
|
||||
void outperint() {
|
||||
|
||||
ofstream ofs; //打开一个写的文件流
|
||||
|
||||
ofs.open("test.txt", ios::out); //把这个流和文件关联起来
|
||||
|
||||
ofs << "姓名:张三" << endl;
|
||||
ofs << "年龄:18" << endl;
|
||||
ofs << "性别:男" << endl;
|
||||
|
||||
ofs.close(); //操作完成记得close()关闭
|
||||
}
|
||||
1.2、读文件
|
||||
函 数 功 能
|
||||
|
||||
函数 功能
|
||||
bad() 如果进行非法操作,返回true,否则返回false
|
||||
clear() 设置内部错误状态,如果用缺省参量调用则清除所有错误位
|
||||
eof() 如果提取操作已经到达文件尾,则返回true,否则返回false
|
||||
good() 如果没有错误条件和没有设置文件结束标志,返回true,否则返回false
|
||||
fail() 与good相反,操作失败返回false,否则返回true
|
||||
is_open() 判定流对象是否成功地与文件关联,若是,返回true,否则返回false
|
||||
void inputfile() {
|
||||
ifstream ofs;
|
||||
ofs.open("test.txt", ios::in);
|
||||
if (ofs.is_open()) {
|
||||
cout << "已成功和文件关联!!!" << endl;
|
||||
//两种方式
|
||||
//第一种
|
||||
char chr[1024];
|
||||
while (ofs >> chr) {
|
||||
cout << chr << endl;
|
||||
}
|
||||
|
||||
//第二种
|
||||
char buf[1024] = { 0 };
|
||||
while (ofs.getline(buf, sizeof(buf)));
|
||||
{
|
||||
cout << buf << endl;
|
||||
}
|
||||
};
|
||||
if (!ofs.is_open()) { //不为真
|
||||
cout << "尚未与文件关联!!!" << endl;
|
||||
}
|
||||
ofs.close();
|
||||
|
||||
随机存取
|
||||
seekg(pos,ios::);
|
||||
seekg(pos);
|
||||
seekp(pos,ios::);
|
||||
seekp(pos);
|
||||
|
||||
tellg(pos,ios::);
|
||||
tellg(pos);
|
||||
tellp(pos,ios::);
|
||||
tellp(pos);
|
16
c++/universal/fast
Normal file
16
c++/universal/fast
Normal file
@ -0,0 +1,16 @@
|
||||
C++代码性能优化的方法
|
||||
1. 使用const关键字
|
||||
2. 避免频繁进行内存分配和释放
|
||||
3. 尽量减少值传递,多用引用来传递参数
|
||||
4. 局部变量VS静态变量(多次调用局部更快,因为局部变量可以读入寄存器,静态不行)
|
||||
5. ++i和i++引申出的效率问题(某些情况下,使用迭代器可能比使用指针更优:迭代器++i可以减少一次构造和析构)
|
||||
6. 避免使用多重继承
|
||||
7. 低级代码使用位运算替代算术运算
|
||||
8. 使用编译器自带的优化选项
|
||||
9. 将小粒度函数声明为内联函数(inline)
|
||||
10. 循环内定义,还是循环外定义对象:由构造函数和复制操作的效率比较决定
|
||||
11. 小函数放在同一循环内效率高,大函数分开放效率更高(由cpu寄存器决定)
|
||||
12. 尽量少使用dynamic_cast
|
||||
13. 减少除法运算的使用,除数尽量使用常量,让编译器有空间优化
|
||||
14. 多用直接初始化
|
||||
15. 循环展开加速
|
53
c++/universal/include.txt
Normal file
53
c++/universal/include.txt
Normal file
@ -0,0 +1,53 @@
|
||||
头函数库
|
||||
#include<bits/stdc++.h>//万能头,包括大部分头文件。
|
||||
#include <ctype.h>//字符处理
|
||||
#include <cctype>
|
||||
#include <cerrno>
|
||||
#include <clocale>
|
||||
#include <cmath>
|
||||
#include <complex> //复数类
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <ctime>
|
||||
#include <cwchar>
|
||||
#include <errno.h>//定义错误码
|
||||
#include <float.h>//浮点数处理
|
||||
#include <fstream.h>//文件输入/输出
|
||||
#include <fstream>
|
||||
#include <iomanip.h>//参数化输入/输出
|
||||
#include <iostream.h> //数据流输入/输出
|
||||
#include <limits.h> //定义各种数据类型最值常量
|
||||
#include <locale.h> //定义本地化函数
|
||||
#include <math.h> //定义数学函数
|
||||
#include <stdio.h> //定义输入/输出函数
|
||||
#include <stdlib.h> //定义杂项函数及内存分配函数
|
||||
#include <string.h> //字符串处理
|
||||
#include <strstrea.h> //基于数组的输入/输出
|
||||
#include <time.h> //定义关于时间的函数
|
||||
#include <wchar.h> //宽字符处理及输入/输出
|
||||
#include <wctype.h> //宽字符分类
|
||||
#include <algorithm> //STL 通用算法
|
||||
#include <bitset> //STL 位集容器
|
||||
#include <deque> //STL 双端队列容器
|
||||
#include <exception> //异常处理类
|
||||
#include <functional> //STL 定义运算函数(代替运算符)
|
||||
#include <limits>
|
||||
#include <list> //STL 线性列表容器
|
||||
#include <map> //STL 映射容器
|
||||
#include <iomanip>
|
||||
#include <ios> //基本输入/输出支持
|
||||
#include <iosfwd> //输入/输出系统使用的前置声明
|
||||
#include <iostream>
|
||||
#include <istream> //基本输入流
|
||||
#include <ostream> //基本输出流
|
||||
#include <queue> //STL 队列容器
|
||||
#include <set> //STL 集合容器
|
||||
#include <sstream> //基于字符串的流
|
||||
#include <stack> //STL 堆栈容器
|
||||
#include <stdexcept> //标准异常类
|
||||
#include <streambuf> //底层输入/输出支持
|
||||
#include <string> //字符串类
|
||||
#include <utility> //STL 通用模板类
|
||||
#include <vector> //STL 动态数组容器
|
||||
#include <windows.h>
|
92
c++/universal/string.txt
Normal file
92
c++/universal/string.txt
Normal file
@ -0,0 +1,92 @@
|
||||
# c风格字符串处理函数
|
||||
|
||||
strcpy(buf, "hello"); // 用后面的字符串覆盖前面的字符串
|
||||
strncpy(buf, "hello", 5); // 增加指定长度
|
||||
|
||||
strcat(buf, "hello"); // 连接字符串
|
||||
strncat(buf, "hello", 5);
|
||||
|
||||
strcmp(buf, "hello"); // 比较字符串,相等返回0
|
||||
|
||||
strlen(buf); // 返回长度,不包括'\0'
|
||||
|
||||
strstr(buf, "hello"); // 返回第一次出现子串的指针
|
||||
|
||||
strtok(buf, " "); // 分割字符串,返回分割过的字符串
|
||||
|
||||
memset(buf, 0, sizeof(buf));//覆写内存块
|
||||
|
||||
memcpy(buf, "hello", 5); //复制内存块
|
||||
|
||||
memmove(buf + 1, buf, 4); //移动5个字节到前一个位置
|
||||
|
||||
|
||||
# string
|
||||
|
||||
## 构造
|
||||
|
||||
string(); // 默认构造,创建一个空的字符串
|
||||
string(const char &str); // c风格字符串初始化
|
||||
string(int n,char c); // 用字符填充一个字符串
|
||||
|
||||
## 赋值
|
||||
|
||||
string& operator=(const char* str); // c风格字符串赋值给当前string类
|
||||
string& operator=(const string& str); // 另一个容器复制
|
||||
string& operator=(const cahr c); // 字符赋值
|
||||
|
||||
## 存取
|
||||
|
||||
char& operator[](int n); // 通过[]获取字符,注意溢出
|
||||
|
||||
## 拼接
|
||||
|
||||
string& operator+=(const string& str); // 追加到末尾
|
||||
string& operator+=(const char* str); // 追加到末尾
|
||||
string& operator+=(const char c); // 追加到末尾
|
||||
|
||||
## 查找
|
||||
|
||||
int find(const string& str, int pos = 0) const; // 查找str在当前字符串第一次出现的位置,pos为开始查找的位置
|
||||
int find(const char* str, int pos = 0) const; // 查找str在当前字符串第一次出现的位置
|
||||
int rfind(const char* str, int pos = npos) const; // 查找str在当前字符串第一次出现的位置,反向查询
|
||||
|
||||
string::npos 在值上等于-1 即size_t的最大值 表示直到字符串结束
|
||||
|
||||
## 替换
|
||||
|
||||
string& replace(int pos, int n, const string& str); // 从pos开始替换,n个字符
|
||||
string& replace(int pos, int n, const char* str); // 从pos开始替换,n个字符
|
||||
|
||||
## 比较
|
||||
|
||||
int compare(const string& str) const; //根据字典序
|
||||
int compare(const char* str) const; //根据字典序
|
||||
|
||||
各种比较操作符都有重载
|
||||
|
||||
## 子串
|
||||
|
||||
string substr(int pos = 0, int n = npos) const; //返回从pos开始,长度为n的子串
|
||||
|
||||
## 插入
|
||||
|
||||
string& insert(int pos, const char* str); //在pos位置插入
|
||||
string& insert(int pos, const string& str); //在pos位置插入
|
||||
string& insert(int pos, int n, char c); //在pos位置插入
|
||||
|
||||
## 删除
|
||||
|
||||
string& erase(int pos, int n = npos); //在pos位置插入
|
||||
|
||||
# 两种转换
|
||||
|
||||
string str1;
|
||||
const char* str2 = str1.c_str();
|
||||
|
||||
const char* str3;
|
||||
string str4(str3);
|
||||
|
||||
# 神奇转换函数
|
||||
|
||||
string to_ strinf(任何类型); //将好多类型转换成string
|
34
c++/universal/常用函数.txt
Normal file
34
c++/universal/常用函数.txt
Normal file
@ -0,0 +1,34 @@
|
||||
abs(x); //求x的绝对值 e.g.abs(-5)=5
|
||||
fabs() //实数绝对值
|
||||
a=clock();测量从程序开始到目前的时间,并把值给a。(单位毫秒级)
|
||||
exp(x); //求x的自然指数e^x e.g.exp(1)=2.718282
|
||||
floor(x); //向下取整
|
||||
ceil(x); //向上取整
|
||||
log(x); //求实数x的自然数对数 e.g.log(1)=0
|
||||
pow(x,y); //计算x^y,输出为双精度实数 e.g.pow(2,3)=8
|
||||
sqrt(x); //求x的平方根 e.g.sqrt(25)=5
|
||||
str.length();获取字符串长度(只能用在字符串)string b="123456789";//字符串定义 初始化。
|
||||
str.size();
|
||||
strlen(str);获取字符数组长度(只能用在字符数组)。
|
||||
abort() //终止程序运行 不能结束工作
|
||||
exit() //终止程序运行 做结束工作
|
||||
max(a,b) //两数中最大
|
||||
min(a,b) //两数中最小
|
||||
swap(a,b) //交换两个类型相同的变量
|
||||
|
||||
sort(数组名+起始单元,数组名+结束单元,排序方法cmp倒);
|
||||
sort(a,a+n);//sort默认为升序
|
||||
int cmp(int a,int b)
|
||||
{
|
||||
return a>b;
|
||||
}
|
||||
|
||||
Sleep(s时间);//程序运行到此处时暂停s毫秒,注意大小写,需调用头文件#include<windows.h>
|
||||
|
||||
void color(const unsigned short textColor) //颜色字函数
|
||||
{
|
||||
if(textColor>=0&&textColor<=15)
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),textColor);
|
||||
else
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
|
||||
}
|
276
c++/windows/Key.txt
Normal file
276
c++/windows/Key.txt
Normal file
@ -0,0 +1,276 @@
|
||||
C++ 获取鼠标点击位置
|
||||
1.检测鼠标点击事件
|
||||
GetAsyncKeyState函数可以检测按键点击事件
|
||||
这里是它的函数原型:
|
||||
SHORT_stdcall GetAsyncKeyState(int vKey);
|
||||
我们首先要根据这个函数定义一个宏KEY_DOWN,这样可以方便以后的调用
|
||||
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
|
||||
常量名 对应按键 取值
|
||||
—————————————————————————————————————————————————————————
|
||||
VK_LBUTTON 鼠标左键 0x01
|
||||
VK_RBUTTON 鼠标右键 0x02
|
||||
VK_CANCEL Ctrl + Break 0x03
|
||||
VK_MBUTTON 鼠标中键 0x04
|
||||
VK_BACK Backspace 键 0x08
|
||||
VK_TAB Tab 键 0x09
|
||||
VK_RETURN 回车键 0x0D
|
||||
VK_SHIFT Shift 键 0x10
|
||||
VK_CONTROL Ctrl 键 0x11
|
||||
VK_MENU Alt 键 0x12
|
||||
VK_PAUSE Pause 键 0x13
|
||||
VK_CAPITAL Caps Lock 键 0x14
|
||||
VK_ESCAPE Esc 键 0x1B
|
||||
VK_SPACE 空格键 0x20
|
||||
VK_PRIOR Page Up 键 0x21
|
||||
VK_NEXT Page Down 键 0x22
|
||||
VK_END End 键 0x23
|
||||
VK_HOME Home 键 0x24
|
||||
VK_LEFT 左箭头键 0x25
|
||||
VK_UP 上箭头键 0x26
|
||||
VK_RIGHT 右箭头键 0x27
|
||||
VK_DOWN 下箭头键 0x28
|
||||
VK_SNAPSHOT Print Screen 键 0x2C
|
||||
VK_Insert Insert 键 0x2D
|
||||
VK_Delete Delete 键 0x2E
|
||||
'0' – '9' 数字 0 - 9 0x30 - 0x39
|
||||
'A' – 'Z' 字母 A - Z 0x41 - 0x5A
|
||||
VK_LWIN 左WinKey(104键盘才有) 0x5B
|
||||
VK_RWIN 右WinKey(104键盘才有) 0x5C
|
||||
VK_APPS AppsKey(104键盘才有) 0x5D
|
||||
VK_NUMPAD0 小键盘 0 键 0x60
|
||||
VK_NUMPAD1 小键盘 1 键 0x61
|
||||
VK_NUMPAD2 小键盘 2 键 0x62
|
||||
VK_NUMPAD3 小键盘 3 键 0x63
|
||||
VK_NUMPAD4 小键盘 4 键 0x64
|
||||
VK_NUMPAD5 小键盘 5 键 0x65
|
||||
VK_NUMPAD6 小键盘 6 键 0x66
|
||||
VK_NUMPAD7 小键盘 7 键 0x67
|
||||
VK_NUMPAD8 小键盘 8 键 0x68
|
||||
VK_NUMPAD9 小键盘 9 键 0x69
|
||||
VK_F1 - VK_F24 功能键F1 – F24 0x70 - 0x87
|
||||
VK_NUMLOCK Num Lock 键 0x90
|
||||
VK_SCROLL Scroll Lock 键 0x91
|
||||
这个函数可以用来检测鼠标左键的按下,我们就需要这个,先来测试一下效果
|
||||
|
||||
#include <windows.h> //GetAsyncKeyState所需头文件
|
||||
#include <iostream>
|
||||
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //用来检测按键的点击事件
|
||||
int main() {
|
||||
//----------移除快速编辑模式(对于win10用户)----------
|
||||
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
|
||||
DWORD mode;
|
||||
GetConsoleMode(hStdin, &mode);
|
||||
mode &= ~ENABLE_QUICK_EDIT_MODE;
|
||||
SetConsoleMode(hStdin, mode);
|
||||
//----------循环检测----------
|
||||
while(1) { //循环检测
|
||||
if(KEY_DOWN(VK_LBUTTON)) { //鼠标左键按下
|
||||
printf("key down!\n");
|
||||
}
|
||||
Sleep(20); //等待20毫秒,减少CPU占用
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
可以看到,每次我们点击鼠标左键都会输出key down!这就说明我们的程序成功了。当然,如果你对其他的按键检测感兴趣,你也可以试试其他的。
|
||||
|
||||
那么接下来接下来就是获取鼠标点击时的位置了。
|
||||
|
||||
2.获取鼠标位置
|
||||
那么如何获取鼠标的位置呢?C++为我们提供了GetCursorPos这个函数,它可以用来获取鼠标在屏幕上的位置。这个函数需要提供一个POINT类型的地址,像下面这样:
|
||||
POINT p;
|
||||
GetCursorPos(&p);
|
||||
POINT类型包含int x和int y两个变量,通过GetCursorPos函数就可以获取鼠标的位置,代码很简单,先来看一下效果:
|
||||
#include <windows.h> //所需头文件
|
||||
#include <iostream>
|
||||
POINT p;
|
||||
int main() {
|
||||
//----------循环检测----------
|
||||
while(1) {
|
||||
GetCursorPos(&p); //获取鼠标在屏幕上的位置
|
||||
printf("(%d,%d)\n",p.x,p.y);
|
||||
Sleep(20); //等待20毫秒,减少CPU占用
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
现在我们已经完成了已经完成了第二步,然后我们就要获取鼠标点击位置了。
|
||||
|
||||
3.获取鼠标点击位置
|
||||
这个也是分简单,我们只需要把刚才的两段代码合起来就行了。
|
||||
#include <windows.h> //GetAsyncKeyState所需头文件
|
||||
#include <iostream>
|
||||
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //用来检测按键的点击事件
|
||||
POINT p;
|
||||
int main() {
|
||||
//----------移除快速编辑模式(对于win10用户)----------
|
||||
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
|
||||
DWORD mode;
|
||||
GetConsoleMode(hStdin, &mode);
|
||||
mode &= ~ENABLE_QUICK_EDIT_MODE;
|
||||
SetConsoleMode(hStdin, mode);
|
||||
|
||||
//----------循环检测----------
|
||||
while(1) { //循环检测
|
||||
if(KEY_DOWN(VK_LBUTTON)) { //鼠标左键按下
|
||||
GetCursorPos(&p); //获取鼠标在屏幕上的位置
|
||||
printf("key down (%d,%d)\n",p.x,p.y);
|
||||
}
|
||||
Sleep(100); //等待100毫秒,减少CPU占用
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
现在的程序已经基本上完成了 ,但是聪明的你可能会发现,这些坐标都是整个屏幕上的,如果我只想获取鼠标在该窗口上的位置呢?
|
||||
这其实很简单,C++也为我们提供了这样一个函数ScreenToClient,它用来获取鼠标在指定窗口上的位置,其使用方法与之前的差不多:
|
||||
POINT p;
|
||||
GetCursorPos(&p);
|
||||
ScreenToClient(h,&p);
|
||||
在使用该函数之前,我们要先获取一下控制台窗口的句柄,用它来指定窗口;
|
||||
HWND h=GetForegroundWindow();
|
||||
其中,GetForegroundWindow函数用来获取最顶层窗口的句柄,这很适合我们的程序。
|
||||
那么就先上代码吧!
|
||||
#include <windows.h> //GetAsyncKeyState所需头文件
|
||||
#include <iostream>
|
||||
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //用来检测按键的点击事件
|
||||
|
||||
POINT p;
|
||||
HWND h=GetForegroundWindow();
|
||||
|
||||
int main() {
|
||||
|
||||
//----------移除快速编辑模式(对于win10用户)----------
|
||||
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
|
||||
DWORD mode;
|
||||
GetConsoleMode(hStdin, &mode);
|
||||
mode &= ~ENABLE_QUICK_EDIT_MODE;
|
||||
SetConsoleMode(hStdin, mode);
|
||||
|
||||
//----------循环检测----------
|
||||
while(1) { //循环检测
|
||||
if(KEY_DOWN(VK_LBUTTON)) { //鼠标左键按下
|
||||
POINT p;
|
||||
GetCursorPos(&p);
|
||||
ScreenToClient(h,&p); //获取鼠标在窗口上的位置
|
||||
printf("key down (%d,%d)\n",p.x,p.y);
|
||||
}
|
||||
Sleep(100); //等待100毫秒,减少CPU占用
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
现在输出的就是鼠标在控制台窗口上的位置了,但是如果需要像获取光标位置一样得到鼠标位置对应的控制台窗口上输出的坐标该怎样办呢?
|
||||
|
||||
首先我们要获取控制台字体的高和宽,像下面这样:
|
||||
HANDLE hOutput;
|
||||
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
CONSOLE_FONT_INFO consoleCurrentFont;
|
||||
GetCurrentConsoleFont(hOutput, FALSE, &consoleCurrentFont);
|
||||
|
||||
GetStdHandle(STD_OUTPUT_HANDLE)用来获取窗口的输出句柄,将它储存到hOutput内,consoleCurrentFont用来储存字体的信息,用GetCurrentConsoleFont函数可以获取当前控制台的字体信息。获取字体的高和宽就像下面这样:
|
||||
|
||||
consoleCurrentFont.dwFontSize.X //宽
|
||||
consoleCurrentFont.dwFontSize.Y //高
|
||||
然后用鼠标的位置除以这两个之就行了,话不多说,先上代码。
|
||||
|
||||
成品
|
||||
#include <windows.h> //GetAsyncKeyState所需头文件
|
||||
#include <iostream>
|
||||
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //用来检测按键的点击事件
|
||||
|
||||
POINT p;
|
||||
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
HWND h=GetForegroundWindow();
|
||||
CONSOLE_FONT_INFO consoleCurrentFont;
|
||||
|
||||
int main() {
|
||||
//----------移除快速编辑模式(对于win10用户)----------
|
||||
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
|
||||
DWORD mode;
|
||||
GetConsoleMode(hStdin, &mode);
|
||||
mode &= ~ENABLE_QUICK_EDIT_MODE;
|
||||
SetConsoleMode(hStdin, mode);
|
||||
|
||||
//----------循环检测----------
|
||||
while(1) { //循环检测
|
||||
if(KEY_DOWN(VK_LBUTTON)) { //鼠标左键按下
|
||||
POINT p;
|
||||
GetCursorPos(&p);
|
||||
ScreenToClient(h,&p); //获取鼠标在窗口上的位置
|
||||
GetCurrentConsoleFont(hOutput, FALSE, &consoleCurrentFont); //获取字体信息
|
||||
int x=p.x/=consoleCurrentFont.dwFontSize.X;
|
||||
int y=p.y/=consoleCurrentFont.dwFontSize.Y;
|
||||
printf("key down (%d,%d)\n",x,y);
|
||||
}
|
||||
Sleep(100); //等待100毫秒,减少CPU占用
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
4.1 实例:鼠标控制绘图
|
||||
在写这个程序之前,我们先来了解一下几个函数:
|
||||
void gotoxy(int x, int y) {
|
||||
COORD pos = {x,y};
|
||||
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
|
||||
SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
|
||||
}
|
||||
这个函数用来移动光标来输出。
|
||||
void HideTheCursor() {
|
||||
CONSOLE_CURSOR_INFO cciCursor;
|
||||
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
|
||||
if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
|
||||
cciCursor.bVisible = FALSE;
|
||||
SetConsoleCursorInfo(hStdOut, &cciCursor);
|
||||
}
|
||||
}
|
||||
#include <windows.h> //GetAsyncKeyState所需头文件
|
||||
#include <iostream>
|
||||
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) //用来检测按键的点击事件
|
||||
|
||||
POINT p;
|
||||
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
HWND h=GetForegroundWindow();
|
||||
CONSOLE_FONT_INFO consoleCurrentFont;
|
||||
|
||||
//----------移动光标----------
|
||||
void gotoxy(int x, int y) {
|
||||
COORD pos = {x,y};
|
||||
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
|
||||
SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
|
||||
}
|
||||
|
||||
//----------隐藏光标----------
|
||||
void HideTheCursor() {
|
||||
CONSOLE_CURSOR_INFO cciCursor;
|
||||
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
|
||||
if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
|
||||
cciCursor.bVisible = FALSE;
|
||||
SetConsoleCursorInfo(hStdOut, &cciCursor);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
HideTheCursor(); //隐藏光标
|
||||
|
||||
//----------移除快速编辑模式(对于win10用户)----------
|
||||
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
|
||||
DWORD mode;
|
||||
GetConsoleMode(hStdin, &mode);
|
||||
mode &= ~ENABLE_QUICK_EDIT_MODE;
|
||||
SetConsoleMode(hStdin, mode);
|
||||
|
||||
//----------循环检测----------
|
||||
while(1) { //循环检测
|
||||
if(KEY_DOWN(VK_LBUTTON)) { //鼠标左键按下
|
||||
POINT p;
|
||||
GetCursorPos(&p);
|
||||
ScreenToClient(h,&p); //获取鼠标在窗口上的位置
|
||||
GetCurrentConsoleFont(hOutput, FALSE, &consoleCurrentFont); //获取字体信息
|
||||
int x=p.x/=consoleCurrentFont.dwFontSize.X;
|
||||
int y=p.y/=consoleCurrentFont.dwFontSize.Y;
|
||||
gotoxy(x,y); //移动光标置鼠标位置
|
||||
printf("@"); //在鼠标位置输出
|
||||
}
|
||||
Sleep(10); //延时
|
||||
}
|
||||
return 0;
|
||||
}
|
35
c++/windows/其他操作.txt
Normal file
35
c++/windows/其他操作.txt
Normal file
@ -0,0 +1,35 @@
|
||||
continue; //跳过下面的步骤,开始下一次循环。
|
||||
|
||||
system("color 04");//调用#include <windows.h>头文件
|
||||
/*
|
||||
0=黑色 8=灰色
|
||||
1=蓝色 9=淡蓝色
|
||||
2=绿色 A=淡绿色
|
||||
3=浅绿色 B=淡浅绿色
|
||||
4=红色 C=淡红色
|
||||
5=紫色 D=淡紫色
|
||||
6=黄色 E=淡黄色
|
||||
7=白色 F=亮白色
|
||||
*/
|
||||
system("mode con cols=30 lines=20");//调整显示框大小 cols:宽 lines:长
|
||||
|
||||
system("pause");//冻结屏幕:暂停。
|
||||
|
||||
system("mkdir F:\\hello");//在F盘创建一个名为hello的文件。C盘默认为桌面。
|
||||
//桌面地址:C:\Users\Administrator\desktop
|
||||
|
||||
system("title yourname");//设置程序名
|
||||
|
||||
a=clock();测量从程序开始到目前的时间,并把值给a。(单位毫秒级)
|
||||
|
||||
#include <windows.h> //把光标移动到指定坐标
|
||||
#include <time.h>
|
||||
void GoToxy(int x,int y) //光标移动函数,X表示横坐标,Y表示纵坐标。
|
||||
{
|
||||
COORD coord; //使用头文件自带的坐标结构
|
||||
coord.X=x; //这里将int类型值传给short,不过程序中涉及的坐标值均不会超过short范围
|
||||
coord.Y=y;
|
||||
HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出句柄
|
||||
SetConsoleCursorPosition(a,coord); //以标准输出的句柄为参数设置控制台光标坐标
|
||||
}
|
||||
|
6
c++/windows/句柄.txt
Normal file
6
c++/windows/句柄.txt
Normal file
@ -0,0 +1,6 @@
|
||||
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)//判断这个键是否按下
|
||||
#define KEY_UP(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 0 : 1)//判断这个键是否弹起
|
||||
#define KEY_EVERY(lpkeyState) GetKeyboardState(lpKeyState)//获得所有的256个键(键盘按键、鼠标按键等等)的状态,lpKeyState是指向一个256bit的数组,存放所有键的状态。
|
||||
#define KEY_NOW(nVirtKey) GetKeyState(nVirtKey)//用于判断nVirtKey的状态。用返回值的最高位表示,最高位为1表示当前键处于down的状态;最高位为0当前键处于up状态。此函数从消息队列中读取消息进行处理。
|
||||
#define setcolor(x) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x)//设置颜色
|
||||
#define GetWindow() GetForegroundWindow();//得到窗口信息
|
BIN
game/3bb766778c5bad46a3c93556d7847c2f.png
Normal file
BIN
game/3bb766778c5bad46a3c93556d7847c2f.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 414 KiB |
117
linux/file/.bashrc
Normal file
117
linux/file/.bashrc
Normal file
@ -0,0 +1,117 @@
|
||||
# ~/.bashrc: executed by bash(1) for non-login shells.
|
||||
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
|
||||
# for examples
|
||||
|
||||
# If not running interactively, don't do anything
|
||||
case $- in
|
||||
*i*) ;;
|
||||
*) return;;
|
||||
esac
|
||||
|
||||
# don't put duplicate lines or lines starting with space in the history.
|
||||
# See bash(1) for more options
|
||||
HISTCONTROL=ignoreboth
|
||||
|
||||
# append to the history file, don't overwrite it
|
||||
shopt -s histappend
|
||||
|
||||
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
|
||||
HISTSIZE=500
|
||||
HISTFILESIZE=500
|
||||
|
||||
# check the window size after each command and, if necessary,
|
||||
# update the values of LINES and COLUMNS.
|
||||
shopt -s checkwinsize
|
||||
|
||||
# If set, the pattern "**" used in a pathname expansion context will
|
||||
# match all files and zero or more directories and subdirectories.
|
||||
#shopt -s globstar
|
||||
|
||||
# make less more friendly for non-text input files, see lesspipe(1)
|
||||
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
|
||||
|
||||
# set variable identifying the chroot you work in (used in the prompt below)
|
||||
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
|
||||
debian_chroot=$(cat /etc/debian_chroot)
|
||||
fi
|
||||
|
||||
# set a fancy prompt (non-color, unless we know we "want" color)
|
||||
case "$TERM" in
|
||||
xterm-color|*-256color) color_prompt=yes;;
|
||||
esac
|
||||
|
||||
# uncomment for a colored prompt, if the terminal has the capability; turned
|
||||
# off by default to not distract the user: the focus in a terminal window
|
||||
# should be on the output of commands, not on the prompt
|
||||
#force_color_prompt=yes
|
||||
|
||||
if [ -n "$force_color_prompt" ]; then
|
||||
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
|
||||
# We have color support; assume it's compliant with Ecma-48
|
||||
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
|
||||
# a case would tend to support setf rather than setaf.)
|
||||
color_prompt=yes
|
||||
else
|
||||
color_prompt=
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$color_prompt" = yes ]; then
|
||||
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h@\t\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
|
||||
else
|
||||
PS1='${debian_chroot:+($debian_chroot)}\u@\h@\t:\w\$ '
|
||||
fi
|
||||
unset color_prompt force_color_prompt
|
||||
|
||||
# If this is an xterm set the title to user@host:dir
|
||||
case "$TERM" in
|
||||
xterm*|rxvt*)
|
||||
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h@\t: \w\a\]$PS1"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# enable color support of ls and also add handy aliases
|
||||
if [ -x /usr/bin/dircolors ]; then
|
||||
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
|
||||
alias ls='ls --color=auto'
|
||||
#alias dir='dir --color=auto'
|
||||
#alias vdir='vdir --color=auto'
|
||||
|
||||
alias grep='grep --color=auto'
|
||||
alias fgrep='fgrep --color=auto'
|
||||
alias egrep='egrep --color=auto'
|
||||
fi
|
||||
|
||||
# colored GCC warnings and errors
|
||||
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
|
||||
|
||||
# some more ls aliases
|
||||
alias ll='ls -ahlF'
|
||||
alias l='ls -lF'
|
||||
# Add an "alert" alias for long running commands. Use like so:
|
||||
# sleep 10; alert
|
||||
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
|
||||
|
||||
# Alias definitions.
|
||||
# You may want to put all your additions into a separate file like
|
||||
# ~/.bash_aliases, instead of adding them here directly.
|
||||
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
|
||||
|
||||
if [ -f ~/.bash_aliases ]; then
|
||||
. ~/.bash_aliases
|
||||
fi
|
||||
|
||||
# enable programmable completion features (you don't need to enable
|
||||
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
|
||||
# sources /etc/bash.bashrc).
|
||||
if ! shopt -oq posix; then
|
||||
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
||||
. /usr/share/bash-completion/bash_completion
|
||||
elif [ -f /etc/bash_completion ]; then
|
||||
. /etc/bash_completion
|
||||
fi
|
||||
fi
|
||||
alias powerele="upower -i /org/freedesktop/UPower/devices/battery_BAT0"
|
||||
export LANG=en_US.UTF-8
|
27
linux/file/.profile
Normal file
27
linux/file/.profile
Normal file
@ -0,0 +1,27 @@
|
||||
# ~/.profile: executed by the command interpreter for login shells.
|
||||
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
|
||||
# exists.
|
||||
# see /usr/share/doc/bash/examples/startup-files for examples.
|
||||
# the files are located in the bash-doc package.
|
||||
|
||||
# the default umask is set in /etc/profile; for setting the umask
|
||||
# for ssh logins, install and configure the libpam-umask package.
|
||||
#umask 022
|
||||
|
||||
# if running bash
|
||||
if [ -n "$BASH_VERSION" ]; then
|
||||
# include .bashrc if it exists
|
||||
if [ -f "$HOME/.bashrc" ]; then
|
||||
. "$HOME/.bashrc"
|
||||
fi
|
||||
fi
|
||||
|
||||
# set PATH so it includes user's private bin if it exists
|
||||
if [ -d "$HOME/bin" ] ; then
|
||||
PATH="$HOME/bin:$PATH"
|
||||
fi
|
||||
|
||||
# set PATH so it includes user's private bin if it exists
|
||||
if [ -d "$HOME/.local/bin" ] ; then
|
||||
PATH="$HOME/.local/bin:$PATH"
|
||||
fi
|
30
linux/file/.vimrc
Normal file
30
linux/file/.vimrc
Normal file
@ -0,0 +1,30 @@
|
||||
syntax on
|
||||
set number "显示行号
|
||||
set ts=4
|
||||
"set expandtab "tab to space
|
||||
set autoindent "自动缩进
|
||||
set encoding=utf-8 "使用utf-8字符编码
|
||||
set fileencoding=utf-8
|
||||
"set cindent
|
||||
set nocompatible "?
|
||||
"set guifont=consolas:h14
|
||||
set wrap "自动折行
|
||||
set cursorline "光标行高亮
|
||||
set hlsearch "高亮显示搜索结果
|
||||
set incsearch "搜索模式下,每输入一个字符,就跳到对应结果
|
||||
set ignorecase "忽略搜索大小写
|
||||
|
||||
nnoremap <space>b :buffers<cr>:b<space>
|
||||
nnoremap <space>e :b#<cr>
|
||||
nnoremap <space>s :split<space>
|
||||
nnoremap <space>w :w<cr>
|
||||
nnoremap qw :wq<cr>
|
||||
nnoremap qq :q<cr>
|
||||
nnoremap <space>tt :tabedit<space>
|
||||
nnoremap <space>to :tabonly<cr>
|
||||
nnoremap <space>tc :tabclose<cr>
|
||||
inoremap jf <esc>
|
||||
inoremap jq <esc>:wq<cr>
|
||||
inoremap jw <c-x><c-n>
|
||||
inoremap jl <c-x><c-l>
|
||||
cnoremap jf <c-c>
|
14
linux/file/backup_etc.sh
Normal file
14
linux/file/backup_etc.sh
Normal file
@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
PATH=/bin:/sbin:/usr/local/bin
|
||||
export PATH
|
||||
read -p "Please input (in/out)" cz
|
||||
|
||||
if [ ${cz} == "in" ]; then
|
||||
cp -v ~/.profile ~/.bashrc ~/.vimrc ./
|
||||
cp -rv ~/.ssh ./
|
||||
fi
|
||||
|
||||
if [ ${cz} == "out" ]; then
|
||||
cp -iv ./.profile ./.bashrc ./.vimrc ~/
|
||||
fi
|
37
linux/file/issue
Normal file
37
linux/file/issue
Normal file
@ -0,0 +1,37 @@
|
||||
Ubuntu 20.04.6 LTS \n \l
|
||||
|
||||
|
||||
@@@@@@@@@@@@@@@@@ @@@ @@@@ @@ @@ @@
|
||||
@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@ @@
|
||||
@@@@ @@@ @@@ @@ @@ @@
|
||||
@@@ @@@ @@ @@@@@@@@@@@@ @@ @@
|
||||
@@@ @@@ @@@@@@@@@@@@@@@@@@@@@@@ @@ @@ @@ @@@@
|
||||
@@@ @@ @@ @@ @@ @@ @@ @@ @@@@
|
||||
@@@@ @@ @@ @@@@ @@@@ @@@ @@ @@
|
||||
@@@@ @@ @@@@@@@@@@@@@@@@ @@@@ @@ @@@ @@ @@@
|
||||
@@@@ @@@@ @@ @@ @@ @@@ @@ @@ @@@@ @@ @@
|
||||
@@@ @@@@@ @@ @@ @@ @@@@ @@ @@ @@ @@
|
||||
@@@ @@@@@@@@@@@@@@@@ @@ @@ @@ @@@
|
||||
@@@ @@ @@ @@ @@ @@ @@ @@@
|
||||
@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@ @ @@ @@ @@@ @@@@@
|
||||
@@@ @@ @@@ @@ @@@ @@@@@@@@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@ aa
|
||||
@@@ @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@
|
||||
@@ @@ @@@ @@@
|
||||
@ @@@@@@@@@@@@@@@@@ @@ @@ @@ @@@ @@@
|
||||
@@@@@@@@@@@@@@@@ @@@@ @@ @@ @@ @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@@@ @@@ @@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@@@@ @@@@ @@ @@@
|
||||
@@ @@@@@@@@@@@ @@@ @@ @@ @@ @@@ @@@ @@ @@@ @@@ @@ @@@
|
||||
@@ @@ @@ @@@ @@ @@ @@ @@@ @@ @@ @@@ @@@ @@@
|
||||
@@ @@ @@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@@@@@@@@@@@@@@@
|
||||
@@ @@@@@@@@ @@ @@@ @@@@ @@ @ @@ @@ @@ @@@ @@@
|
||||
@@ @@ @@@ @@ @@ @@ @@ @@ @@@ @@@
|
||||
@@ @@@ @@ @@ @ @@ @@ @@ @@@ @@@
|
||||
@@ @@ @@@ @@@ @@@ @@ @@ @@ @@@ @@@ @v
|
||||
@@@@ @@@ @@@@@@@@@@@@ @@@@ @@@@@@@@@@@@@@@@@@@@@@@@@o
|
14
linux/format.sh
Normal file
14
linux/format.sh
Normal file
@ -0,0 +1,14 @@
|
||||
# Copyright(c) 2024 ely. All rights reserved.
|
||||
#
|
||||
# Name: format.sh v1.0
|
||||
#
|
||||
# Program:
|
||||
# Shell Script format
|
||||
#
|
||||
# History:
|
||||
# 2024/07/24 e0x1a new commit
|
||||
#
|
||||
# AUTHOR:
|
||||
# e0x1a "e0x1a@aliyun.com"
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
11
linux/q_a/Huge_Page
Normal file
11
linux/q_a/Huge_Page
Normal file
@ -0,0 +1,11 @@
|
||||
内存默认分页 2MB
|
||||
Linux对Huge_Page的支持可以带来的好处:
|
||||
1.大大减少Page Fault的次数
|
||||
2.降低TLB Miss的概率
|
||||
3.增加MMU地址转换的效率
|
||||
4.Page可以永驻内存,避免被swap
|
||||
|
||||
cat /proc/meminfo | grep Huge //查看Huge相关内容
|
||||
|
||||
cat /proc/sys/vm/nr_hugepages //确认分配的数量
|
||||
echo 1024 > /proc/sys/vm/nr_hugepages //分配huge
|
71
linux/q_a/command
Normal file
71
linux/q_a/command
Normal file
@ -0,0 +1,71 @@
|
||||
#1
|
||||
nohup 命令挂机(退出登陆后依然执行)
|
||||
nohup [command] &
|
||||
|
||||
#2 screen
|
||||
`screen` 是一个功能强大的命令行工具,主要用于 Unix 和类 Unix 操作系统中,它允许用户开启多个独立的会话(称为"窗口"),在这些会话之间可以自由切换而不会中断已经运行的程序。以下是 `screen` 的一些主要功能和使用方法:
|
||||
### 主要功能:
|
||||
1. **多会话管理**:可以同时运行多个独立的 shell 会话。
|
||||
2. **会话分离与重连**:可以从一个会话中分离出来,稍后再重新连接到该会话。
|
||||
3. **窗口分割**:在一个 screen 会话中,可以水平或垂直分割窗口,以同时查看和操作多个任务。
|
||||
4. **滚动记录**:可以查看会话的滚动记录,即使之前的输出已经滚出屏幕。
|
||||
5. **复制和粘贴**:在 screen 会话中,可以使用快捷键复制文本并粘贴到其他位置。
|
||||
6. **会话锁定**:可以锁定当前会话,防止他人查看或操作。
|
||||
7. **自动保存会话**:在网络断开或其他异常情况下,screen 可以自动保存当前会话状态。
|
||||
### 基本使用方法:
|
||||
1. **启动一个新的 screen 会话**:
|
||||
```bash
|
||||
screen
|
||||
```
|
||||
2. **列出当前的 screen 会话**:
|
||||
```bash
|
||||
screen -ls
|
||||
```
|
||||
3. **重新连接到一个已存在的会话**:
|
||||
```bash
|
||||
screen -r [会话ID或名称]
|
||||
```
|
||||
4. **分离当前会话**:
|
||||
在 screen 会话中按 `Ctrl-a` 然后按 `d`。
|
||||
5. **在会话中创建新窗口**:
|
||||
在 screen 会话中按 `Ctrl-a` 然后按 `c`。
|
||||
6. **在窗口之间切换**:
|
||||
在 screen 会话中按 `Ctrl-a` 然后按 `n`(下一个窗口)或 `Ctrl-a` 然后按 `p`(上一个窗口)。
|
||||
7. **分割窗口**:
|
||||
- 水平分割:在 screen 会话中按 `Ctrl-a` 然后按 `"`(双引号键)。
|
||||
- 垂直分割:在 screen 会话中按 `Ctrl-a` 然后按 `S`。
|
||||
8. **调整分割窗口的大小**:
|
||||
- 增加/减少水平大小:在 screen 会话中按 `Ctrl-a` 然后按方向键。
|
||||
- 增加/减少垂直大小:在 screen 会话中按 `Ctrl-a` 然后按 `Shift` 加上方向键。
|
||||
9. **退出 screen 会话**:
|
||||
- 关闭当前窗口:在 screen 会话中按 `Ctrl-a` 然后按 `k`。
|
||||
- 退出所有窗口并结束会话:在 screen 会话中按 `Ctrl-a` 然后按 `\`。
|
||||
10. **锁定当前会话**:
|
||||
在 screen 会话中按 `Ctrl-a` 然后按 `x`。
|
||||
|
||||
#3 smartctl
|
||||
查看硬盘状态参数
|
||||
-a 全部参数
|
||||
-H 是否正常
|
||||
|
||||
#4 perf
|
||||
性能剖析工具
|
||||
可分析程序运行期间发生的系统硬件事件
|
||||
sudo perf record ./a.out
|
||||
sudo perf report -i perf.data
|
||||
|
||||
#5 ulimit
|
||||
查看和修改进程运行资源限制
|
||||
-H/S # 设置/显示 软/硬 限制
|
||||
-a # 显示所有
|
||||
-t # cpu time
|
||||
-f # file size
|
||||
-s # stack size
|
||||
-c # core file size
|
||||
-m # memory size
|
||||
-l # lock memory size
|
||||
-p # user processes
|
||||
-n # open file
|
||||
|
||||
#ulimit -Ht 3600
|
||||
|
39
linux/q_a/newPC.txt
Normal file
39
linux/q_a/newPC.txt
Normal file
@ -0,0 +1,39 @@
|
||||
1.配置dhcp
|
||||
vim /etc/network/interfaces
|
||||
auto eth0
|
||||
iface eth0 inet dhcp
|
||||
#iface eth0 inet static
|
||||
#address 192.168.0.108
|
||||
#netmask 255.255.255.0
|
||||
#gateway 192.168.0.101
|
||||
#network 192.168.0.108
|
||||
|
||||
service network restart //cpwl
|
||||
2.配置dns
|
||||
vim /etc/resolv.conf
|
||||
nameserver 114.114.114.114
|
||||
nameserver 8.8.8.8
|
||||
search localdomain
|
||||
|
||||
3.更新应用
|
||||
apt update
|
||||
apt upgrade
|
||||
|
||||
4.安装配置ibus
|
||||
apt install ibus
|
||||
apt install ibus-pinyin
|
||||
ibus-setup
|
||||
|
||||
5.安装gcc,g++,gdb,cmake
|
||||
apt update
|
||||
apt install build-essential gdb
|
||||
gcc --version
|
||||
g++ --version
|
||||
gdb --version
|
||||
apt intall cmake
|
||||
cmake --version
|
||||
|
||||
6.安装各工具
|
||||
tree
|
||||
dnsmap
|
||||
nload
|
23
linux/q_a/proc
Normal file
23
linux/q_a/proc
Normal file
@ -0,0 +1,23 @@
|
||||
`/proc` 是 Linux 系统中的一个虚拟文件系统,它提供了一种查看和控制正在运行的进程的方式。这个文件系统包含了多个目录,目录名对应于系统中的每个进程的进程ID(PID)。每个进程的目录中包含了一些文件,这些文件包含了有关进程的各种信息。以下是一些常见的 `/proc` 目录下的文件及其解释:
|
||||
|
||||
1. **cmdline**: 包含启动进程的完整命令行参数。
|
||||
2. **cwd**: 一个符号链接,指向进程的当前工作目录。
|
||||
3. **environ**: 包含进程的环境变量。
|
||||
4. **exe**: 一个符号链接,指向启动该进程的可执行文件。
|
||||
5. **fd**: 包含该进程打开的文件描述符的目录,每个文件描述符都有一个对应的文件。
|
||||
6. **gid_map**: 显示进程的组ID映射。
|
||||
7. **maps**: 显示进程的内存映射,包括代码段、数据段、堆栈等。
|
||||
8. **mem**: 包含进程使用的内存信息。
|
||||
9. **mounts**: 显示进程的挂载点。
|
||||
10. **mountinfo**: 包含更详细的挂载点信息。
|
||||
11. **numa_maps**: 显示进程的NUMA(非统一内存访问)配置。
|
||||
12. **oom_adj**: 进程的OOM(内存不足)调整值,用于确定哪个进程在内存不足时被杀死。
|
||||
13. **osrelease**: 包含操作系统的版本信息。
|
||||
14. **pid**: 进程的PID,这是一个符号链接,指向 `/proc/self`。
|
||||
15. **stat**: 包含进程的状态信息,如进程ID、父进程ID、CPU时间等。
|
||||
16. **status**: 包含更详细的进程状态信息,如进程的名称、状态、信号等。
|
||||
17. **task**: 包含进程的线程信息。
|
||||
18. **uid_map**: 显示进程的用户ID映射。
|
||||
19. **wchan**: 显示进程正在等待的系统调用。
|
||||
|
||||
可以通过读取这些文件来获取进程的详细信息。例如,使用 `cat /proc/[pid]/status` 可以查看特定进程的状态信息。这些信息对于系统管理员和开发者来说是非常有用的,可以帮助他们监控和调试系统。
|
26
linux/q_a/proc_pid_filesystem
Normal file
26
linux/q_a/proc_pid_filesystem
Normal file
@ -0,0 +1,26 @@
|
||||
VmSize: 虚拟内存总大小。 整个进程使用虚拟内存大小,是VmLib, VmExe, VmData, 和 VmStk的总和。占所有虚拟内存分配(文件映射,共享内存,堆内存,任何内存)的份额。
|
||||
VmLck: 虚拟内存锁。进程当前使用的并且加锁的虚拟内存总数.锁住的物理内存不能交换到硬盘.
|
||||
VmRSS: 虚拟内存驻留集合大小。这是驻留在物理内存的一部分。它没有交换到硬盘。它包括代码,数据和栈。
|
||||
VmData: 虚拟内存数据。堆使用的虚拟内存。表示进程数据段的大小.
|
||||
VmStk: 虚拟内存栈。表示进程堆栈段的大小.
|
||||
VmLib: 虚拟内存库,动态链接库所使用的虚拟内存 表示进程所使用LIB库的大小.
|
||||
VmPeak代表当前进程运行过程中占用内存的峰值.
|
||||
VmHWM是程序得到分配到物理内存的峰值.
|
||||
VmRSS是程序现在使用的物理内存.
|
||||
VmExe:表示进程代码的大小.可执行的虚拟内存,可执行的和静态链接库所使用的虚拟内存
|
||||
VmPTE:占用的页表的大小.
|
||||
VmSwap:进程占用Swap的大小.
|
||||
Threads:表示当前进程组的线程数量.
|
||||
SigPnd:屏蔽位,存储了该线程的待处理信号,等同于线程的PENDING信号.
|
||||
ShnPnd:屏蔽位,存储了该线程组的待处理信号.等同于进程组的PENDING信号.
|
||||
SigBlk:存放被阻塞的信号,等同于BLOCKED信号.
|
||||
SigIgn:存放被忽略的信号,等同于IGNORED信号.
|
||||
SigCgt:存放捕获的信号,等同于CAUGHT信号.
|
||||
CapEff:当一个进程要进行某个特权操作时,操作系统会检查cap_effective的对应位是否有效,而不再是检查进程的有效UID是否为0.
|
||||
CapPrm:表示进程能够使用的能力,在cap_permitted中可以包含cap_effective中没有的能力,这些能力是被进程自己临时放弃的,也可以说cap_effective是cap_permitted的一个子集.
|
||||
CapInh:表示能够被当前进程执行的程序继承的能力.
|
||||
CapBnd:是系统的边界能力,我们无法改变它.
|
||||
Cpus_allowed:3指出该进程可以使用CPU的亲和性掩码,因为我们指定为两块CPU,所以这里就是3,如果该进程指定为4个CPU(如果有话),这里就是F(1111).
|
||||
Cpus_allowed_list:0-1指出该进程可以使用CPU的列表,这里是0-1.
|
||||
voluntary_ctxt_switches表示进程主动切换的次数.
|
||||
nonvoluntary_ctxt_switches表示进程被动切换的次数.
|
41
pc/usb
Normal file
41
pc/usb
Normal file
@ -0,0 +1,41 @@
|
||||
USB 1.0分为两个版本:
|
||||
USB 1.0 Low Speed理论最高速率为1.5Mbit/s或0.1875MBytes/s。
|
||||
USB 1.0 Full Speed理论最高速率为12Mbit/s或1.5MBytes/s。
|
||||
|
||||
USB 1.1(即USB 1.0 Full Speed)理论最高速率为12Mbit/s或1.5MBytes/s。
|
||||
|
||||
USB 2.0分为两个版本:
|
||||
USB 2.0 Full Speed(即USB 1.1)理论最高速率为12Mbit/s或1.5MBytes/s。
|
||||
USB 2.0 Hi Speed理论最高速率为480Mbit/s或60MBytes/s。
|
||||
|
||||
USB 3.0的理论最高速率为5Gbit/s或600MBytes/s。
|
||||
|
||||
USB 3.1分为两个版本:
|
||||
USB 3.1 Gen 1(即USB 3.0)理论最高速率为5Gbit/s或600MBytes/s。
|
||||
USB 3.1 Gen 2理论最高速率为10Gbit/s或1250MBytes/s。
|
||||
|
||||
USB 3.2分为三个版本:
|
||||
USB 3.2 Gen 1(即USB 3.1 Gen 1)理论最高速率为5Gbit/s或600MBytes/s。
|
||||
USB 3.2 Gen 2(即USB 3.1 Gen 2)理论最高速率为10Gbit/s或1250MBytes/s。
|
||||
USB 3.2 Gen 2×2(即USB 3.1 Gen 2双通道,仅限Type-C接口)理论最高速率为20Gbit/s或2500MBytes/s。
|
||||
|
||||
USB 4分为两个版本:
|
||||
USB 4 v1.0(仅限Type-C接口)的理论最高速率为40Gbit/s或5000MBytes/s。
|
||||
USB 4 v2.0(仅限Type-C接口)的理论最高速率为80Gbit/s或10000MBytes/s。
|
||||
|
||||
雷电(Thunderbolt)分为五个版本:
|
||||
雷电1代(Thunderbolt 1)理论最高速率为10Gbit/s或1250MBytes/s。
|
||||
雷电2代(Thunderbolt 2)理论最高速率为20Gbit/s或2500MBytes/s。
|
||||
雷电3代(Thunderbolt 3)理论最高速率为40Gbit/s或5000MBytes/s。
|
||||
雷电4代(Thunderbolt 4)理论最高速率为40Gbit/s或5000MBytes/s。
|
||||
雷电5代(Thunderbolt 5)理论最高速率为80Gbit/s或10000MBytes/s。
|
||||
|
||||
注意:实际传输速度取决于很多方面,而且很难达到理论速度。
|
||||
|
||||
1、单位换算:1Byte=8bit。
|
||||
2、软件方面要求必须正确安装相关驱动。
|
||||
3、硬件要求连接的双方都必须支持同种版本的USB或雷电(Thunderbolt)接口,若不同,传输速度则以速度低的一方为基准。
|
||||
4、即使连接的双方USB或雷电(Thunderbolt)接口版本相同,不同的存储介质,其速度也不一样。
|
||||
5、基于闪存(Flash芯片)存储设备的速度取决于Flash芯片的类型(SLC/MLC/TLC/QLC)和等级、主控芯片、缓存等因素。普通机械硬盘的读写速度取决于盘片的数量、转速和缓存等因素。
|
||||
6、USB接口有多种颜色,黑色USB接口是USB2.0接口,蓝色USB接口是USB3.0接口(USB 3.1 Gen 1),青绿色和红色USB接口是USB 3.1 Gen 2接口,黄色USB接口是支持关机充电的USB2.0接口,叫做Powered USB。
|
||||
7、USB接口的外形有Type-A(常见于电脑)、Type-B(常见于打印机)、Type-C(常见于新型号电脑和手机)和Mini USB(Mini-B接口常见于扫描仪)、Micro USB(Micro-B接口常见于安卓手机)等。
|
BIN
pc/usb.png
Normal file
BIN
pc/usb.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 405 KiB |
BIN
pc/usb2.png
Normal file
BIN
pc/usb2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 397 KiB |
BIN
pc/usb3.png
Normal file
BIN
pc/usb3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 478 KiB |
20
tool/curl/aaa
Normal file
20
tool/curl/aaa
Normal file
@ -0,0 +1,20 @@
|
||||
curl [URL] #默认GET请求
|
||||
|
||||
curl -X -POST [URL] #POST请求
|
||||
== curl -XPOST [URL]
|
||||
|
||||
curl [URL] -d 'data' #添加数据
|
||||
curl -XPUT [URL] -d 'data_new' #更新数据
|
||||
curl -XDELETE [URL] #删除数据
|
||||
|
||||
curl -I [URL] #返回首部
|
||||
|
||||
curl -O [URL] #下载资源
|
||||
-o [name] #自定义文件名
|
||||
|
||||
curl --limit-rate [速度] -o [name] -O [URL] #限速下载
|
||||
|
||||
curl -C - -o [name] [URL] #中断下载后继续
|
||||
|
||||
curl [...] -L #跟随重定向
|
||||
curl -v [...] #显示底层连接信息
|
33
tool/docker/aaa
Normal file
33
tool/docker/aaa
Normal file
@ -0,0 +1,33 @@
|
||||
安装docker
|
||||
sudo apt-get install docker-compose
|
||||
|
||||
配置/etc/docker/daemon.json
|
||||
|
||||
{
|
||||
"registry-mirrors":
|
||||
[
|
||||
"https://dockerproxy.com",
|
||||
"https://docker.mirrors.ustc.edu.cn",
|
||||
"https://docker.nju.edu.cn"
|
||||
]
|
||||
}
|
||||
|
||||
docker ps #查看所有运行容器
|
||||
docker ps -a #全部
|
||||
|
||||
docker stop [ID / NAME] #停止某容器
|
||||
|
||||
docker start [ID / NAME] #启动和删除容器
|
||||
docker rm [ID / NAME]
|
||||
|
||||
docker pull 仓库名/镜像名
|
||||
|
||||
docker save [ID] > xxx.tar #导出为tar文件
|
||||
docker load < xxx.tar #导入tar为镜像
|
||||
|
||||
docker commit [ID] [镜像名] #容器保存为镜像
|
||||
|
||||
docker image ls #查看本地所有镜像
|
||||
docker rmi [ID / NAME] #删除镜像
|
||||
|
||||
docker exec -it [ID / NAME] bash #操作容器
|
156
tool/git/aaa
Normal file
156
tool/git/aaa
Normal file
@ -0,0 +1,156 @@
|
||||
git config --global credential.helper store
|
||||
/\ /\ user.name " "
|
||||
|| || user.email " "
|
||||
配置git环境 配置整个环境
|
||||
|
||||
|
||||
工作树 -- 暂存区 -- 本地仓库 -- 远端仓库
|
||||
|
||||
|
||||
|
||||
git status #查看当前仓库状态
|
||||
|
||||
git init #创建仓库
|
||||
--bare <code.git> #没有工作树的选项(多用于git服务器)
|
||||
|
||||
git add 文件 #将文件放到暂存区
|
||||
* #所有 新建的,删除的,修改的
|
||||
. #新建的,修改的
|
||||
-u #删除的,修改的
|
||||
|
||||
git commit #将暂存区修改合成一个提交
|
||||
-m "填写概要"
|
||||
# 不写概要则会创建一个文件,第一行概要,第二行空,第三行详细
|
||||
-am #相当于add + commit
|
||||
|
||||
git log #仓库日志
|
||||
-a #查看所有分支的提交记录
|
||||
--stat #详细
|
||||
--pretty=[short/oneline] #特殊显示
|
||||
--graph #更直观选项
|
||||
--after="YYYY-MM-DD" #指定日期
|
||||
--before="YYYY-MM-DD" #指定日期
|
||||
--author="xxx" #特点作者提交
|
||||
origin/master #看远端仓库的日志
|
||||
文件/目录 #单独追踪
|
||||
|
||||
git diff #比对差异 与暂存区差异
|
||||
HEAD #与本地仓库最新提交差异
|
||||
|
||||
git reflog #查询历史操作
|
||||
|
||||
git branch #显示所有分支
|
||||
xxx #创建名为 xxx 的分支
|
||||
-a #查看当前工作分支相关信息
|
||||
-r #列出远端仓库的所有分支
|
||||
-d/D #删除分支 大写强制
|
||||
-m/M #修改主分支 大写强制
|
||||
|
||||
git checkout #切换分支
|
||||
xxx #切换到 xxx 分支
|
||||
-b xxx #创建并切换到 xxx 分支
|
||||
[file] #未提交的文件撤销修改
|
||||
[hash] #回退
|
||||
|
||||
git merge #合并分支
|
||||
xxx #将 xxx 分支合并到当前工作分支
|
||||
--no-ff #在历史记录中记录合并
|
||||
--squash #将分支合并为一个提交进行合并,简化历史
|
||||
|
||||
git reset #回溯
|
||||
--hard HEAD~1 #撤销最后一次commit 本地仓库 and 暂存区 and 工作树
|
||||
HEAD~1 #撤销最后一次commit 仅本地仓库 and 暂存区
|
||||
--soft HEAD~1 #撤销最后一次commit 仅本地仓库
|
||||
|
||||
git revert #提交一个反commit用于撤销前面的commit
|
||||
HEAD
|
||||
[hash]
|
||||
|
||||
git rebase #变基
|
||||
-i #压缩历史
|
||||
xxx #尝试与xxx分支同步合并
|
||||
--abort #当冲突时撤销合并
|
||||
--continue #继续合并
|
||||
|
||||
git switch #
|
||||
-c xxx #创建并切换到 xxx 分支
|
||||
|
||||
git stash #保存工作区当前状态
|
||||
list #查看存储状态
|
||||
pop #将最新一次记录恢复并删除
|
||||
apply #默认恢复最新记录
|
||||
clear #清楚所有记录
|
||||
show #看当前与栈顶差异
|
||||
save xxx #提交注释
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
git clone URL #clone一个仓库
|
||||
|
||||
git remote #操作远程仓库
|
||||
add origin URL #添加远程仓库
|
||||
rm origin URL #删除远程仓库
|
||||
-v #显示详细信息
|
||||
|
||||
git push #推送到远程
|
||||
origin xxx:xxx #将 xxx 分支推送到远端 origin 仓库 本地分支:远端分支
|
||||
-u origin xxx #推送同时,尝试将origin 的 xxx 设置为上游
|
||||
origin xxx --delete #删除远端的xxx分支
|
||||
--tags #推送全部标签
|
||||
-f #强制提交
|
||||
origin :xxx #删除远端 xxx 分支
|
||||
|
||||
git pull #拉取远端仓库 全部 = git fetch + git merge
|
||||
origin xxx #直接覆盖当前工作树
|
||||
--rebase # = git fetch + git rebase HEAD
|
||||
|
||||
git fetch #拉取到本地仓库中 不对工作树进行覆盖
|
||||
|
||||
git tag #查看所有标签
|
||||
-d #删除标签
|
||||
[tag] #
|
||||
-a #设置标签名
|
||||
-m #填写标签说明
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
.gitignore #此文件中可放置不想追踪的文件
|
||||
|
||||
|
||||
|
||||
#1:
|
||||
修改了ssh端口的推送与clone
|
||||
git remote add iaalai ssh://root@api.iaalai.cn:25522/root/git/code.git/
|
||||
git clone ssh://root@api.iaalai.cn:25522/root/git/code.git/
|
||||
|
||||
#2:
|
||||
搭建git服务器
|
||||
1 + install git/openssh
|
||||
2 + useradd git
|
||||
3 + 创建证书登陆
|
||||
用户: .ssh/id.rsa.pub -> 服务器:.ssh/authorized_keys 一行一个
|
||||
4 + 创建仓库并移交权限给git用户
|
||||
5 + 禁用登陆shll usermod -s /bin/git-shell git
|
||||
|
||||
#3:
|
||||
工作流参考
|
||||
1 + git clone 到本地仓库
|
||||
2 + git checkout -b feature 创建新分支
|
||||
3 + git commit -am 提交
|
||||
4 + git push origin feature
|
||||
当遇到主分支更新时
|
||||
1 + git checkout main 切换到主分支
|
||||
2 + git pull origin main 拉取最新更新
|
||||
3 + git checkout feature 切换到特性分支
|
||||
4 + git rebase main 尝试变基合并
|
||||
5 + git push -f origin feature 强制提交特性分支
|
||||
6 + Pull Request Squash and merge 合并到主分支
|
||||
7 + git checkout main 切换回主分支
|
||||
8 + git branch -D feature 删除特性分支
|
||||
9 + git pull origin main 拉取最新主分支
|
||||
|
||||
#4:
|
||||
开发时查看远端仓库是否更新
|
||||
pull or fetch
|
15
tool/git/github
Normal file
15
tool/git/github
Normal file
@ -0,0 +1,15 @@
|
||||
加速器
|
||||
https://cloud.tsinghua.edu.cn/d/df482a15afb64dfeaff8/
|
||||
推送到github
|
||||
git remote add origin https://
|
||||
git branch -M master
|
||||
git push -u origin master
|
||||
|
||||
github访问令牌
|
||||
创建:
|
||||
用户头像 -> setting -> 最后一项 -> 创建令牌
|
||||
tips:令牌要当场复制,离开页面就没有了
|
||||
|
||||
使用:
|
||||
git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git
|
||||
|
33
tool/nginx/aaa
Normal file
33
tool/nginx/aaa
Normal file
@ -0,0 +1,33 @@
|
||||
nginx
|
||||
-s stop #立即停止
|
||||
quit #正常停止
|
||||
reload #重新加载
|
||||
reopen #打开日志文件
|
||||
|
||||
-V #看一堆参数
|
||||
-t #检测配置文件是否正常
|
||||
|
||||
events {} #必包含
|
||||
|
||||
listen 80 #监听80端口
|
||||
|
||||
server_name e0x1a.cn #主机地址
|
||||
|
||||
root /var/www #指定根目录
|
||||
|
||||
index inext.html #指定index文件
|
||||
|
||||
location / {}
|
||||
'=' #完全匹配
|
||||
'^~' #优先前缀
|
||||
'~'和'~*' #正则
|
||||
' ' #普通匹配
|
||||
|
||||
|
||||
部署
|
||||
sudo apt-get update
|
||||
sudo apt-get install nginx
|
||||
sudo systemctl start nginx
|
||||
sudo systemctl enable nginx
|
||||
sudo systemctl status nginx
|
||||
|
36
tool/ssh/aaa
Normal file
36
tool/ssh/aaa
Normal file
@ -0,0 +1,36 @@
|
||||
SSH免密登录是一种使用SSH协议进行身份验证的方法,它允许用户在不输入密码的情况下登录远程服务器。以下是实现SSH免密登录的基本步骤:
|
||||
|
||||
1. **生成密钥对**:
|
||||
- 在本地机器上打开终端或命令提示符。
|
||||
- 使用`ssh-keygen`命令生成一对公钥和私钥。例如:
|
||||
```bash
|
||||
ssh-keygen -t rsa -b 4096
|
||||
```
|
||||
2. **复制公钥到远程服务器**:
|
||||
- 使用`ssh-copy-id`命令将公钥复制到远程服务器。例如:
|
||||
```bash
|
||||
ssh-copy-id user@remote_host
|
||||
```
|
||||
- 这将自动将你的公钥添加到远程服务器的`~/.ssh/authorized_keys`文件中。
|
||||
|
||||
3. **配置SSH客户端**:
|
||||
- 确保你的SSH客户端配置文件`~/.ssh/config`正确设置,以便使用私钥进行身份验证。例如:
|
||||
4. **禁用密码登录**:
|
||||
- /etc/ssh/sshd_config
|
||||
- 设置PasswordAuthentication no
|
||||
5. **测试免密登录**:
|
||||
- 尝试使用SSH连接到远程服务器,如果一切设置正确,你将能够无需输入密码直接登录。
|
||||
|
||||
6. **注意事项**:
|
||||
- 确保远程服务器的SSH服务配置允许密钥认证。通常在`/etc/ssh/sshd_config`文件中设置。
|
||||
- 确保本地和远程的SSH配置文件没有错误,并且权限设置正确。
|
||||
|
||||
7. **安全性**:
|
||||
- 使用强密码短语保护你的私钥文件。
|
||||
- 定期更换密钥对以提高安全性。
|
||||
|
||||
以上步骤应该可以帮助你设置SSH免密登录。如果你遇到任何问题,可以查看SSH的日志文件或使用`-v`参数进行调试,例如:
|
||||
```bash
|
||||
ssh -v user@remote_host
|
||||
```
|
||||
这将提供详细的调试信息,帮助你诊断问题。
|
8
tool/ssh/config
Normal file
8
tool/ssh/config
Normal file
@ -0,0 +1,8 @@
|
||||
Host iaalai
|
||||
HostName api.iaalai.cn #连接地址
|
||||
User e0x1a #连接用户名
|
||||
Port 20022 #连接端口
|
||||
IdentityFile ~/.ssh/id_rsa #密钥地址
|
||||
IdentitiesOnly yes #仅使用密钥
|
||||
ServerAliveInterval 60 #每60s发一个空包保持连接
|
||||
ServerAliveCountMax 3 #3次未响应断开
|
5
windows/Windows+R.txt
Normal file
5
windows/Windows+R.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmd //cmd
|
||||
dxdiag //电脑配置
|
||||
mrt //清理恶意软件
|
||||
cleanmgr //清理磁盘
|
||||
regedit //使用注册表
|
2
windows/bat/查询视频.bat
Normal file
2
windows/bat/查询视频.bat
Normal file
@ -0,0 +1,2 @@
|
||||
dir /s/a/b/os 此电脑\HONOR 20 PRO\内部存储*.mp4
|
||||
pause
|
120
windows/cmd/cmd.txt
Normal file
120
windows/cmd/cmd.txt
Normal file
@ -0,0 +1,120 @@
|
||||
1.chkdsk C: /F
|
||||
2.format G: //修复U盘
|
||||
arp -a //arp缓存
|
||||
fsutil behavior query disabledeletenotify //命令提示符查看系统有无开启TRIM回收指令
|
||||
fsutil behavior set disabledeletenotify 1 //开启
|
||||
fsutil behavior set disabledeletenotify 0 //关闭
|
||||
start //打开应用或网站
|
||||
ping //网络连接及网络连接的状况
|
||||
for /l %d in (1,1,255)do ping 10.168.1%d 范围测试
|
||||
tracert //显示数据包到达目的主机所经过的路径
|
||||
ipconfig/all //显示当前TCP/IP配置的设置值
|
||||
ipconfig /flushdns // 清空DNS缓存
|
||||
nslookup //查询任何一台机器的IP和对应的域名
|
||||
netstat //显示活动的TCP连接,计算机侦听的端口,以太网统计信息,IP路由表,IPv4统计信息以及IPv6统计信息
|
||||
powercfg -h off //关闭休眠,可节省C盘空间
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
windows控制台命令 大集合
|
||||
|
||||
开始→运行→命令 集锦
|
||||
|
||||
winver---------检查Windows版本
|
||||
|
||||
wmimgmt.msc----打开windows管理体系结构(WMI)
|
||||
|
||||
wupdmgr--------windows更新程序
|
||||
|
||||
wscript--------windows脚本宿主设置
|
||||
|
||||
write----------写字板
|
||||
|
||||
winmsd---------系统信息
|
||||
|
||||
Msconfig.exe---系统配置实用程序
|
||||
|
||||
mspaint--------画图板
|
||||
|
||||
mstsc----------远程桌面连接
|
||||
|
||||
magnify--------放大镜实用程序
|
||||
|
||||
dxdiag---------检查DirectX信息
|
||||
|
||||
drwtsn32------ 系统医生
|
||||
|
||||
devmgmt.msc--- 设备管理器
|
||||
|
||||
dfrg.msc-------磁盘碎片整理程序
|
||||
|
||||
diskmgmt.msc---磁盘管理实用程序
|
||||
|
||||
notepad--------打开记事本
|
||||
|
||||
nslookup-------网络管理的工具向导
|
||||
|
||||
ntbackup-------系统备份和还原
|
||||
|
||||
ntmsmgr.msc----移动存储管理器
|
||||
|
||||
ntmsoprq.msc---移动存储管理员操作请求
|
||||
|
||||
netstat -an----(TC)命令检查接口
|
||||
|
||||
sysedit--------系统配置编辑器
|
||||
|
||||
sigverif-------文件签名验证程序
|
||||
|
||||
sndrec32-------录音机
|
||||
|
||||
shrpubw--------创建共享文件夹
|
||||
|
||||
secpol.msc-----本地安全策略
|
||||
|
||||
services.msc---本地服务设置
|
||||
|
||||
Sndvol32-------音量控制程序
|
||||
|
||||
sfc.exe--------系统文件检查器
|
||||
|
||||
taskmgr--------任务管理器
|
||||
|
||||
eventvwr-------事件查看器
|
||||
|
||||
eudcedit-------造字程序
|
||||
|
||||
explorer-------打开资源管理器
|
||||
|
||||
packager-------对象包装程序
|
||||
|
||||
regedit.exe----注册表
|
||||
|
||||
rsop.msc-------组策略结果集
|
||||
|
||||
regedt32-------注册表编辑器
|
||||
|
||||
regsvr32 /u *.dll----停止dll文件运行
|
||||
|
||||
regsvr32 /u zipfldr.dll------取消ZIP支持
|
||||
|
||||
chkdsk.exe-----Chkdsk磁盘检查
|
||||
|
||||
certmgr.msc----证书管理实用程序
|
||||
|
||||
calc-----------启动计算器
|
||||
|
||||
charmap--------启动字符映射表
|
||||
|
||||
cliconfg-------SQL SERVER 客户端网络实用程序
|
||||
|
||||
compmgmt.msc---计算机管理
|
||||
|
||||
cleanmgr-------垃圾整理
|
||||
|
||||
ciadv.msc------索引服务程序
|
||||
|
||||
osk------------打开屏幕键盘
|
||||
|
||||
fsmgmt.msc-----共享文件夹管理器
|
||||
|
||||
gpedit.msc-----组策略
|
2784
windows/vbs/VBS.txt
Normal file
2784
windows/vbs/VBS.txt
Normal file
File diff suppressed because it is too large
Load Diff
62
windows/vbs/nv.vbs
Normal file
62
windows/vbs/nv.vbs
Normal file
@ -0,0 +1,62 @@
|
||||
WScript.Echo("嘿,谢谢你打开我哦,我等你很久拉!"&TSName)
|
||||
WScript.Echo("你是可爱的小朋吗?")
|
||||
WScript.Echo("哈,我想你拉,这你都不知道吗?")
|
||||
WScript.Echo("怎么才来,说~是不是不关心我")
|
||||
WScript.Echo("哼,我生气拉,等你这么久,心都凉啦。")
|
||||
WScript.Echo("小强很生气,后果很严重哦。")
|
||||
WScript.Echo("嘿嘿!你也会很惨滴哦")
|
||||
WScript.Echo("是不是想清除我?")
|
||||
WScript.Echo("那你要点上50下哦,不过会给你惊喜滴")
|
||||
WScript.Echo("还剩49下,快点点哦")
|
||||
WScript.Echo("还剩48下,快点,小笨蛋!")
|
||||
WScript.Echo("还剩47下对,就这样快点点!")
|
||||
WScript.Echo("还剩46下。你啊就是笨,要快哦,我先不打扰你工作。")
|
||||
WScript.Echo("还剩45下,记得要快哦!")
|
||||
WScript.Echo("还剩43下")
|
||||
WScript.Echo("还剩42下")
|
||||
WScript.Echo("还剩41下")
|
||||
WScript.Echo("还剩40下")
|
||||
WScript.Echo("还剩39下")
|
||||
WScript.Echo("还剩38下")
|
||||
WScript.Echo("还剩37下")
|
||||
WScript.Echo("还剩36下")
|
||||
WScript.Echo("还剩35下")
|
||||
WScript.Echo("还剩34下")
|
||||
WScript.Echo("还剩33下")
|
||||
WScript.Echo("还剩32下")
|
||||
WScript.Echo("还剩30下")
|
||||
WScript.Echo("还剩29下")
|
||||
WScript.Echo("还剩28下")
|
||||
WScript.Echo("还剩27下")
|
||||
WScript.Echo("还剩26下")
|
||||
WScript.Echo("还剩25下")
|
||||
WScript.Echo("还剩24下")
|
||||
WScript.Echo("还剩23下")
|
||||
WScript.Echo("还剩22下")
|
||||
WScript.Echo("还剩21下")
|
||||
WScript.Echo("还剩20下")
|
||||
WScript.Echo("还剩19下")
|
||||
WScript.Echo("还剩18下")
|
||||
WScript.Echo("还剩17下")
|
||||
WScript.Echo("还剩16下")
|
||||
WScript.Echo("还剩15下")
|
||||
WScript.Echo("还剩14下")
|
||||
WScript.Echo("还剩13下停停!!!慢点,我有话要说")
|
||||
WScript.Echo("还剩12下,你继续点我就会消失滴")
|
||||
WScript.Echo("还剩11下,以后就看不到我拉。555555")
|
||||
WScript.Echo("还剩10下,你现在可以选择停止!")
|
||||
WScript.Echo("还剩9下。你还点啊,不要我拉?")
|
||||
WScript.Echo("还剩8下,有点伤心拉,干嘛丢弃人家")
|
||||
WScript.Echo("还剩7下。疯了,你有点负意!")
|
||||
WScript.Echo("还剩6下。对。你就点吧,我恨你!")
|
||||
WScript.Echo("还剩5下,不明白,删除我你就好吗?")
|
||||
WScript.Echo("还剩4下!真要删除我?")
|
||||
WScript.Echo("还剩3下。可是我真的很眷恋你。。。")
|
||||
WScript.Echo("还剩2下。不要这么绝情嘛,人家是爱你的!")
|
||||
WScript.Echo("还剩1下。哼,既然你这么绝情。也别怪我无义!!!")
|
||||
WScript.Echo("我本因该消失的,不过我留恋你滴芳容,上帝又给了一次机会。")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
123
windows/vbs/vbs整人小脚本.txt
Normal file
123
windows/vbs/vbs整人小脚本.txt
Normal file
@ -0,0 +1,123 @@
|
||||
一、你打开好友的聊天对话框,然后记下在你QQ里好友的昵称,把下面代码里的xx替换一下,就可以自定义发送QQ信息到好友的次数(代码里的数字10改一下即可).
|
||||
xx.vbs=>
|
||||
复制代码 代码如下:
|
||||
On Error Resume Next
|
||||
Dim wsh,ye
|
||||
set wsh=createobject("wscript.shell")
|
||||
for i=1 to 10
|
||||
wscript.sleep 700
|
||||
wsh.AppActivate("与 xx 聊天中")
|
||||
wsh.sendKeys "^v"
|
||||
wsh.sendKeys i
|
||||
wsh.sendKeys "%s"
|
||||
next
|
||||
wscript.quit
|
||||
|
||||
二、我就用这个程序放在学校图书馆查询书刊的机器上,好多人都那它没办法,哈哈
|
||||
do
|
||||
msgbox "You are foolish!"
|
||||
loop
|
||||
|
||||
三、打开无数个计算器,直到死机
|
||||
set wsh=createobject("wscript.shell")
|
||||
do
|
||||
wsh.run "calc"
|
||||
loop
|
||||
|
||||
四、直接关机
|
||||
dim WSHshell
|
||||
set WSHshell = wscript.createobject("wscript.shell")
|
||||
WSHshell.run "shutdown -f -s -t 00",0 ,true
|
||||
|
||||
五、删除D:\所有文件
|
||||
dim WSHshell
|
||||
set WSHshell = wscript.createobject("wscript.shell")
|
||||
WSHshell.run "cmd /c ""del d:\*.* / f /q /s""",0 ,true
|
||||
|
||||
六、不断弹出窗口
|
||||
复制代码 代码如下:
|
||||
while(1)
|
||||
msgbox "哈哈 你被耍了!"
|
||||
loop
|
||||
|
||||
七、不断按下alt+f4 (开什么都关闭……)
|
||||
复制代码 代码如下:
|
||||
dim WSHshell
|
||||
set WSHshell = wscript.createobject("wscript.shell")
|
||||
while(1)
|
||||
WSHshell.SendKeys "%{F4}"
|
||||
loop
|
||||
|
||||
八、按500次回车
|
||||
(以上代码在运行者的电脑上显示500个对话框。其中 do until s=500 ,500可以随意更改)
|
||||
复制代码 代码如下:
|
||||
dim s
|
||||
do until s=500
|
||||
s=s+1
|
||||
msgbox "哥们,给我按500次回车吧",64
|
||||
loop
|
||||
|
||||
九、关不掉的窗口
|
||||
复制代码 代码如下:
|
||||
WScript.Echo("嘿,谢谢你打开我哦,我等你很久拉!"&TSName)
|
||||
WScript.Echo("你是可爱的小朋吗?")
|
||||
WScript.Echo("哈,我想你拉,这你都不知道吗?")
|
||||
WScript.Echo("怎么才来,说~是不是不关心我")
|
||||
WScript.Echo("哼,我生气拉,等你这么久,心都凉啦。")
|
||||
WScript.Echo("小强很生气,后果很严重哦。")
|
||||
WScript.Echo("嘿嘿!你也会很惨滴哦")
|
||||
WScript.Echo("是不是想清除我?")
|
||||
WScript.Echo("那你要点上50下哦,不过会给你惊喜滴")
|
||||
WScript.Echo("还剩49下,快点点哦")
|
||||
WScript.Echo("还剩48下,快点,小笨蛋!")
|
||||
WScript.Echo("还剩47下对,就这样快点点!")
|
||||
WScript.Echo("还剩46下。你啊就是笨,要快哦,我先不打扰你工作。")
|
||||
WScript.Echo("还剩45下,记得要快哦!")
|
||||
WScript.Echo("还剩43下")
|
||||
WScript.Echo("还剩42下")
|
||||
WScript.Echo("还剩41下")
|
||||
WScript.Echo("还剩40下")
|
||||
WScript.Echo("还剩39下")
|
||||
WScript.Echo("还剩38下")
|
||||
WScript.Echo("还剩37下")
|
||||
WScript.Echo("还剩36下")
|
||||
WScript.Echo("还剩35下")
|
||||
WScript.Echo("还剩34下")
|
||||
WScript.Echo("还剩33下")
|
||||
WScript.Echo("还剩32下")
|
||||
WScript.Echo("还剩30下")
|
||||
WScript.Echo("还剩29下")
|
||||
WScript.Echo("还剩28下")
|
||||
WScript.Echo("还剩27下")
|
||||
WScript.Echo("还剩26下")
|
||||
WScript.Echo("还剩25下")
|
||||
WScript.Echo("还剩24下")
|
||||
WScript.Echo("还剩23下")
|
||||
WScript.Echo("还剩22下")
|
||||
WScript.Echo("还剩21下")
|
||||
WScript.Echo("还剩20下")
|
||||
WScript.Echo("还剩19下")
|
||||
WScript.Echo("还剩18下")
|
||||
WScript.Echo("还剩17下")
|
||||
WScript.Echo("还剩16下")
|
||||
WScript.Echo("还剩15下")
|
||||
WScript.Echo("还剩14下")
|
||||
WScript.Echo("还剩13下停停!!!慢点,我有话要说")
|
||||
WScript.Echo("还剩12下,你继续点我就会消失滴")
|
||||
WScript.Echo("还剩11下,以后就看不到我拉。555555")
|
||||
WScript.Echo("还剩10下,你现在可以选择停止!")
|
||||
WScript.Echo("还剩9下。你还点啊,不要我拉?")
|
||||
WScript.Echo("还剩8下,有点伤心拉,干嘛丢弃人家")
|
||||
WScript.Echo("还剩7下。疯了,你有点负意!")
|
||||
WScript.Echo("还剩6下。对。你就点吧,我恨你!")
|
||||
WScript.Echo("还剩5下,不明白,删除我你就好吗?")
|
||||
WScript.Echo("还剩4下!真要删除我?")
|
||||
WScript.Echo("还剩3下。可是我真的很眷恋你。。。")
|
||||
WScript.Echo("还剩2下。不要这么绝情嘛,人家是爱你的!")
|
||||
WScript.Echo("还剩1下。哼,既然你这么绝情。也别怪我无义!!!")
|
||||
WScript.Echo("我本因该消失的,不过我留恋你滴芳容,上帝又给了一次机会。")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
||||
WScript.Echo("想结素我么?那你就再多点一次")
|
11
windows/vbs/小秘密.vbs
Normal file
11
windows/vbs/小秘密.vbs
Normal file
@ -0,0 +1,11 @@
|
||||
text()
|
||||
function text()
|
||||
dim a
|
||||
a=InputBox("做我女朋友吧!")
|
||||
if a="好的"then
|
||||
Msgbox"臭宝,真乖!",0,"恭喜"
|
||||
else
|
||||
Msgbox"臭宝,不同意还想跑!",0,"再来一次"
|
||||
text()
|
||||
end if
|
||||
end function
|
53
windows/快捷键.txt
Normal file
53
windows/快捷键.txt
Normal file
@ -0,0 +1,53 @@
|
||||
Windows快捷键大全
|
||||
|
||||
一、常见用法:
|
||||
|
||||
F2 当你选中一个文件的话,这意味着“重命名”
|
||||
|
||||
F10或ALT 激活当前程序的菜单栏
|
||||
|
||||
windows键或CTRL+ESC 打开开始菜单
|
||||
|
||||
DELETE 删除被选择的选择项目,如果是文件,将被放入回收站
|
||||
|
||||
SHIFT+DELETE 删除被选择的选择项目,如果是文件,将被直接删除而不是放入回收站
|
||||
|
||||
CTRL+N 打开“桌面”文件夹
|
||||
|
||||
CTRL+O 打开“打开文件”对话框
|
||||
|
||||
CTRL+P 打开“打印”对话框
|
||||
|
||||
CTRL+S 保存当前操作的文件
|
||||
|
||||
CTRL+X 剪切被选择的项目到剪贴板
|
||||
|
||||
CTRL+INSERT 或 CTRL+C 复制被选择的项目到剪贴板
|
||||
|
||||
SHIFT+INSERT 或 CTRL+V 粘贴剪贴板中的内容到当前位置
|
||||
|
||||
ALT+BACKSPACE 或 CTRL+Z 撤销上一步的操作
|
||||
|
||||
ALT+SHIFT+BACKSPACE 重做上一步怀废 牟僮?br>
|
||||
|
||||
Windows键+M 最小化所有被打开的窗口。
|
||||
|
||||
Windows键+E 打开资源管理器
|
||||
|
||||
Windows键+R 打开“运行”对话框
|
||||
|
||||
Windows键+'+' 放大镜
|
||||
|
||||
SHIFT+F10或鼠标右击 打开当前活动项目的快捷菜单
|
||||
|
||||
ALT+F4 关闭当前应用程序
|
||||
|
||||
ALT+SPACEBAR 打开程序最左上角的菜单
|
||||
|
||||
ALT+TAB 切换当前程序
|
||||
|
||||
ALT+ESC 切换当前程序
|
||||
|
||||
ALT+ENTER 将windows下运行的MSDOS窗口在窗口和全屏幕状态间切换
|
||||
|
||||
PRINT SCREEN 将当前屏幕以图象方式拷贝到剪贴板
|
740
windows/注册表.txt
Normal file
740
windows/注册表.txt
Normal file
@ -0,0 +1,740 @@
|
||||
一、注册表的由来
|
||||
PC机及其操作系统的一个特点就是允许用户按照自己的要求对计算机系统的硬件和软件进行各种各样的配置。早期的图形操作系统,如Win3.x中,对软硬件工作环境的配置是通过对扩展名为.ini的文件进行修改来完成的,但INI文件管理起来很不方便,因为每种设备或应用程序都得有自己的INI文件,并且在网络上难以实现远程访问。
|
||||
|
||||
为了克服上述这些问题,在Windows 95及其后继版本中,采用了一种叫做“注册表”的数据库来统一进行管理,将各种信息资源集中起来并存储各种配置信息。按照这一原则,Windows各版本中都采用了将应用程序和计算机系统全部配置信息容纳在一起的注册表,用来管理应用程序和文件的关联、硬件设备说明、状态属性以及各种状态信息和数据等。
|
||||
|
||||
与INI文件不同的是:
|
||||
1.注册表采用了二进制形式登录数据;
|
||||
2.注册表支持子键,各级子关键字都有自己的“键值”;
|
||||
3.注册表中的键值项可以包含可执行代码,而不是简单的字串;
|
||||
4.在同一台计算机上,注册表可以存储多个用户的特性。
|
||||
|
||||
注册表的特点有:
|
||||
1.注册表允许对硬件、系统参数、应用程序和设备驱动程序进行跟踪配置,这使得修改某些设置后不用重新启动成为可能。
|
||||
2.注册表中登录的硬件部分数据可以支持高版本Windows的即插即用特性。当Windows检测到机器上的新设备时,就把有关数据保存到注册表中,另外,还可以避免新设备与原有设备之间的资源冲突。
|
||||
3.管理人员和用户通过注册表可以在网络上检查系统的配置和设置,使得远程管理得以实现。
|
||||
|
||||
二、使用注册表
|
||||
1.大家可以在开始菜单中的运行里输入regedit
|
||||
2.也可以在DOS下输入regedit
|
||||
|
||||
三、注册表根键说明
|
||||
hkey_classes_root 包含注册的所有OLE信息和文档类型,是从 hkey_local_machine\software\classes复制的。
|
||||
hkey_current_user 包含登录的用户配置信息,是从hkey_users\当前用户子树复制的。
|
||||
hkey_local_machine 包含本机的配置信息。其中config子树是显示器打印机信息; enum子树是即插即用设备信息;system子树是设备驱动程序和服务参数的控制集合;software子树是应用程序专用设置。
|
||||
hkey_users 所有登录用户信息。
|
||||
hkey_current_config 包含常被用户改变的部分硬件软件配置,如字体设置、显示器类型、打印机设置等。是从hkey_local_machine\config复制的。
|
||||
hkey_dyn_data 包含现在计算机内存中保存的系统信息。
|
||||
|
||||
|
||||
四、注册表详细内容
|
||||
Hkey_local_machine\software\microsoft\windows\currentVersion\explorer\user shell folders 保存个人文件夹、收藏夹的路径
|
||||
Hkey_local_machine\system\currentControlSet\control\keyboard Layouts保存键盘使用的语言以及各种中文输入法
|
||||
Hkey_users\.Default\software\microsoft\internet explorer\typeURLs保存IE浏览器地址栏中输入的URL地址列表信息。清除文档菜单时将被清空。
|
||||
Hkey_users\.Default\so..\mi..\wi..\currentVersion\ex..\menuOrder\startMenu 保留程序菜单排序信息
|
||||
Hkey_users\.Default\so..\microsoft\windows\currentVersion\explorer\RunMRU 保存“开始 * 运行...“中运行的程序列表信息。清除文档菜单时将被清空。
|
||||
Hkey_users\.Default\so..\microsoft\windows\currentVersion\explorer\ecentDocs 保存最近使用的十五个文档的快捷方式(删除掉可解决文档名称重复的毛病),清除文档菜单时将被清空。
|
||||
Hkey_local_machine\software\microsoft\windows\currentVersion\uninstall 保存已安装的Windows应用程序卸载信息。
|
||||
hkey_users\.default\software\microsoft\windows\currentVersion\applets 保存Windows应用程序的纪录数据。
|
||||
Hkey_local_machine\system\CurrentControlSet\services\class 保存控制面板-增添硬件设备-设备类型目录。
|
||||
Hkey_local_machine\system\CurrentControlSet\control\update 立即刷新设置。值为00设置为自动刷新,01设置为手工刷新[在资源管理器中按F5刷新]。
|
||||
HKEY_CURRENT_USER\Control Panel\Desktop 新建串值名MenuShowDelay=0 可使“开始”菜单中子菜单的弹出速度提高。新建串值名MinAnimate,值为1启动动画效果开关窗口,值为0取消动画效果。
|
||||
Hkey_local_machine\software\microsoft\windows\currentVersion\run 保存由控制面板设定的计算机启动时运行程序的名称,其图标显示在任务条右边。[启动文件夹程序运行时图标也在任务条右边]
|
||||
hkey_users\.default\software\microsoft\windows\currentVersion\run保存由用户设定的计算机启动时运行程序的名称,其图标显示在任务条右侧。
|
||||
HKEY_CLASS_ROOT/Paint.Pricture/DefaultIcon 默认图片的图标。双击窗口右侧的字符串,在打开的对话框中删除原来的键值,输入%1。重新启动后,在“我的电脑”中打开Windows目录,选择“大图标“,然后你看到的Bmp文件的图标再也不是千篇一律的画板图标了,而是每个Bmp文件的略图。
|
||||
Hkey-local-machine\ software\ microsoft\ windows\ currentVersion\ Policies\ Ratings 保存IE4.0中文版“安全”*“分级审查”中设置的口令(数据加密)。
|
||||
Hkey-local-machine\ software\ microsoft\ windows\ currentVersion\ explorer\ desktop\nameSpace保存桌面中特殊的图标,如回收站、收件箱、MS Network等。
|
||||
|
||||
|
||||
五、如何备份注册表
|
||||
利用注册表编辑器手工备份注册表
|
||||
|
||||
|
||||
注册表编辑器(Regedit)是操作系统自带的一款注册表工具,通过它就能对注册表进行各种修改。当然,"备份"与"恢复"注册表自然是它的本能了。
|
||||
|
||||
|
||||
(1)通过注册表编辑器备份注册表
|
||||
由于修改注册表有时会危及系统的安全,因此不管是WINDOWS 98还是WINDOWS 2000甚至WINDOWS XP,都把注册表编辑器"藏"在了一个非常隐蔽的地方,要想"请"它出山,必须通过特殊的手段才行。点击"开始"菜单,选择菜单上的"运行"选项,在弹出的"运行"窗口中输入"Regedit"后,点击"确定"按钮,这样就启动了注册表编辑器。
|
||||
|
||||
|
||||
点击注册表编辑器的"注册表"菜单,再点击"导出注册表文件"选项,在弹出的对话框中输入文件名"regedit",将"保存类型"选为"注册表文件",再将"导出范围"设置为"全部",接下来选择文件存储位置,最后点击"保存"按钮,就可将系统的注册表保存到硬盘上。
|
||||
|
||||
|
||||
完成上述步骤后,找到刚才保存备份文件的那个文件夹,就会发现备份好的文件已经放在文件夹中了。
|
||||
|
||||
|
||||
(2)在DOS下备份注册表
|
||||
|
||||
|
||||
当注册表损坏后,WINDOWS(包括"安全模式")无法进入,此时该怎么办呢?在纯DOS环境下进行注册表的备份、恢复是另外一种补救措施,下面来看看在DOS环境下,怎样来备份、恢复注册表。
|
||||
|
||||
|
||||
在纯DOS下通过注册表编辑器备份与恢复注册表前面已经讲解了利用注册表编辑器在WINDOWS环境下备份、恢复注册表,其实"Regedit.exe"这个注册表编辑器不仅能在WINDOWS环境中运行,也能在DOS下使用。
|
||||
|
||||
|
||||
虽然在DOS环境中的注册表编辑器的功能没有在WINDOWS环境中那么强大,但是也有它的独到之处。比如说通过注册表编辑器在WINDOWS中备份了注册表,可系统出了问题之后,无法进入WINDOWS,此时就可以在纯DOS下通过注册表编辑器来恢复注册表。
|
||||
|
||||
|
||||
应该说在DOS环境中备份注册表的情况还是不多见的,一般在WINDOWS中备份就行了,不过在一些特殊的情况下,这种方式就显得很实用了。
|
||||
|
||||
|
||||
进入DOS后,再进入C盘的WINDOWS目录,在该目录的提示符下输入"regedit"后按回车键,便能查看"regedit"的使用参数。
|
||||
|
||||
|
||||
通过"Regedit"备份注册表仍然需要用到"system.dat"和"user.dat"这两个文件,而该程序的具体命令格式是这样的:
|
||||
Regedit /L:system /R:user /E filename.reg Regpath
|
||||
参数含义:
|
||||
/L:system指定System.dat文件所在的路径。
|
||||
/R:user指定User.dat文件所在的路径。
|
||||
/E:此参数指定注册表编辑器要进行导出注册表操作,在此参数后面空一格,输入导出注册表的文件名。
|
||||
Regpath:用来指定要导出哪个注册表的分支,如果不指定,则将导出全部注册表分支。在这些参数中,"/L:system"和"/R:user"参数是可选项,如果不使用这两个参数,注册表编辑器则认为是对WINDOWS目录下的"system.dat"和"user.dat"文件进行操作。如果是通过从软盘启动并进入DOS,那么就必须使用"/L"和"/R"参数来指定"system.dat"和"user.dat"文件的具体路径,否则注册表编辑器将无法找到它们。
|
||||
|
||||
|
||||
比如说,如果通过启动盘进入DOS,则备份注册表的命令是"Regedit /L:C:\windows\/R:C:\windows\/e regedit.reg",该命令的意思是把整个注册表备份到WINDOWS目录下,其文件名为"regedit.reg"。而如果输入的是"regedit /E D:\regedit.reg"这条命令,则是说把整个注册表备份到D盘的根目录下(省略了"/L"和"/R"参数),其文件名为"Regedit.reg"。
|
||||
|
||||
|
||||
(3)用注册表检查器备份注册表
|
||||
在DOS环境下的注册表检查器Scanreg.exe可以用来备份注册表。
|
||||
|
||||
|
||||
命令格式为:
|
||||
Scanreg /backup /restore /comment
|
||||
|
||||
|
||||
参数解释:
|
||||
/backup用来立即备份注册表
|
||||
/restore按照备份的时间以及日期显示所有的备份文件
|
||||
/comment在/restore中显示同备份文件有关的部分
|
||||
|
||||
|
||||
注意:在显示备份的注册表文件时,压缩备份的文件以.CAB文件列出,CAB文件的后面单词是Started或者是NotStarted,Started表示这个文件能够成功启动Windows,是一个完好的备份文件,NotStarted表示文件没有被用来启动Windows,因此还不能够知道是否是一个完好备份。
|
||||
|
||||
|
||||
比如:如果我们要查看所有的备份文件及同备份有关的部分,命令如下:Scanreg /restore /comment
|
||||
|
||||
|
||||
六、使用技巧
|
||||
上面介绍的都是概念上的东东,下面让我们实际操作吧
|
||||
1.加快开机及关机速度
|
||||
|
||||
|
||||
在[开始]-->[运行]-->键入[Regedit]-->[HKEY_CURRENT_USER]-->[Control Panel]-->[Desktop],将字符串值[HungAppTimeout]的数值数据更改为[200],将字符串值[WaitToKillAppTimeout]的数值数据更改为1000.另外在[HKEY_LOCAL_MACHINE]-->[System]-->[CurrentControlSet]-->[Control],将字符串值[HungAppTimeout]的数值数据更改为[200],将字符串值[WaitToKillServiceTimeout]的数值数据更改1000
|
||||
|
||||
|
||||
2.自动关闭停止响应程序
|
||||
|
||||
|
||||
在[开始]-->[运行]-->键入[Regedit]-->[HKEY_CURRENT_USER]-->[Control Panel]-->[Desktop],将字符串值[AutoEndTasks]的数值数据更改为1,重新启动即可
|
||||
|
||||
|
||||
3.清除内存内被不使用的DLL文件
|
||||
|
||||
|
||||
在[开始]-->[运行]-->键入[Regedit]-->[HKKEY_LOCAL_MACHINE]-->[SOFTWARE]-->[Microsoft]-->[Windows]-->[CurrentVersion],在[Explorer]增加一个项[AlwaysUnloadDLL],默认值设为1。注:如由默认值设定为[0]则代表停用此功能
|
||||
|
||||
|
||||
4.加快菜单显示速度
|
||||
|
||||
|
||||
在[开始]-->[运行]-->键入[Regedit]-->[HKEY_CURRENT_USER]-->[Control Panel]-->[Desktop],将字符串值[MenuShowDelay]的数值数据更改为[0],调整后如觉得菜单显示速度太快而不适应者可将[MenuShowDelay]的数值数据更改为[200],重新启动即可
|
||||
|
||||
|
||||
5.禁止修改用户文件夹
|
||||
|
||||
|
||||
找到HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer。如果要锁定“图片收藏”、“我的文档”、“收藏夹”、“我的音乐”这些用户文件夹的物理位置,分别把下面这些键设置成1:DisableMyPicturesDirChange,DisablePersonalDirChange,DisableFavoritesDirChange,DisableMyMusicDirChange
|
||||
|
||||
|
||||
6.减小浏览局域网的延迟时间
|
||||
|
||||
|
||||
和Windows 2000一样,XP在浏览局域网时也存在烦人的延迟问题,但介绍这个问题的资料却很难找到。如果你浏览一台Win 9x的机器,例如,在网上邻居的地址栏输入“\computername”,XP的机器会在它正在连接的机器上检查“任务计划”。这种搜索过程可能造成多达30秒的延迟。如果你直接打开某个共享资源,例如在网上邻居的地址栏输入“\computernameshare”,就不会有这个延迟过程。要想避免XP搜索“任务计划”的操作,提高浏览网络的速度,你可以删除HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerRemoteComputerNameSpace{D6277990-4C6A-11CF-8D87-00AA0060F5BF}子键。该键的类型是REG_SZ
|
||||
|
||||
|
||||
7.屏蔽系统中的热键
|
||||
|
||||
|
||||
点击“开始”→“运行”,输入Regedit,打开注册表编辑器。然后依次打开到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,新建一个双字节值,键名为“NoWindows Keys”,键值为“1”,这样就可以禁止用户利用系统热键来执行一些禁用的命令。如果要恢复,只要将键值设为0或是将此键删除即可
|
||||
|
||||
|
||||
8.关闭不用的共享
|
||||
|
||||
|
||||
安全问题一直为大家所关注,为了自己的系统安全能够有保证,某些不必要的共享还是应该关闭的。用记事本编辑如下内容的注册表文件,保存为任意名字的.Reg文件,使用时双击即可关闭那些不必要的共享:
|
||||
|
||||
|
||||
Windows Registry Editor Version 5.00
|
||||
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
|
||||
|
||||
|
||||
"AutoShareServer"=dword:00000000
|
||||
|
||||
|
||||
"AutoSharewks"=dword:00000000
|
||||
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
|
||||
|
||||
|
||||
"restrictanonymous"=dword:00000001
|
||||
|
||||
|
||||
9.让IE支持多线程下载
|
||||
一般情况下,大家都使用多线程下载软件如Flashget等下载文件,其实IE也可以支持多线程下载的,只是微软将这个功能给藏了起来。我们把它给挖出来就可以使用了。打开注册表编辑器,在注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings下新建双字节值项“MaxConnectionsPerServer”,它决定了最大同步下载的连线数目,一般设定为5~8个连线数目比较好。另外,对于HTTP 1.0服务器,可以加入名为“MaxConnectionsPer1_0Server”的双字节值项,它也是用来设置最大同步下载的数目,也可以设定为5~8。
|
||||
|
||||
|
||||
10.让WINDOWS XP自动登陆
|
||||
|
||||
|
||||
打开:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon,在右边的窗口中的新建字符串"AutoAdminlogon",并把他们的键值为"1",并且把“DefaultUserName”的值设置为用户名,并且另外新建一个字符串值“DefaultPassword”,并设其值为用户的密码
|
||||
|
||||
|
||||
七、我们来让我们的系统瘦瘦身
|
||||
删除多余的虚拟光驱图标
|
||||
|
||||
|
||||
当我们在系统中安装了虚拟光驱后,“我的电脑”中就会多出一个光盘图标,即便日后你不再使用虚拟光驱,虚拟光驱图标还会继续保留,实在没有必要。我们动手来删除这个多余的虚拟光驱图标:单击“开始→运行”,输入“regedit”,按下“确定”键后打开注册表编辑器,依次展开HKEY_LOCAL_MACHINE\Enum\SCSI分支,在SCSI子键下通常有两个子键,它们分别对应着虚拟光驱和物理光驱,把SCSI下的子键全部删除,重新启动电脑后虚拟光驱图标就会被删除。
|
||||
|
||||
|
||||
删除多余的系统级图标
|
||||
|
||||
|
||||
系统级图标是指在安装Windows时由系统自动创建的图标,如回收站、收件箱、网上邻居等,其中有些图标对用户来说并无用处,但这些图标无法直接删除。打开注册表编辑器,依次展开HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\
|
||||
|
||||
|
||||
explorer\Desktop\NameSpace分支,然后删除不需要的子键。关闭注册表编辑器,重新启动电脑后,你会发现桌面上不需要的系统级图标已经消失了。
|
||||
|
||||
|
||||
删除“运行”中多余的选项
|
||||
|
||||
|
||||
如果你多次使用“开始→运行”菜单,会发现它的“打开”窗口被一大堆不再需要的命令弄得凌乱不堪。打开注册表编辑器,依次展开HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion
|
||||
|
||||
|
||||
\Explorer\RunMRU分支,将右侧窗口的相关键值删除即可。
|
||||
|
||||
|
||||
删除“查找”中多余的选项
|
||||
|
||||
|
||||
依次展开HKEY_USER\.Default\Software\Microsoft\Windows\CurrentVersion
|
||||
|
||||
|
||||
\Explorer\Doc-FindSpecMRU分支,将右侧窗口中的相关键值删除即可。
|
||||
|
||||
|
||||
删除多余的键盘布局
|
||||
|
||||
|
||||
Windows试图成为世界的宠儿,因此其键盘布局适合于各国各类人的使用习惯。打开注册表编辑器,依次展开HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
|
||||
|
||||
|
||||
\KeyboardLayouts分支,我们可以看到该分支下保存了西班牙语(传统)、丹麦语、德语(标准)等多种键盘布局,如果你用不到这些语言的键盘布局,完全可以直接删除这些子键。
|
||||
|
||||
|
||||
删除多余的区域设置
|
||||
|
||||
|
||||
与上述键盘布局相类似的还有Windows的区域设置,在注册表编辑器中展开HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
|
||||
|
||||
|
||||
\Nls\Locale分支,简体中文使用者完全可以只保留“00000804”键值,其他可以毫不留情地删除。
|
||||
|
||||
|
||||
八、高级篇
|
||||
1、自动清除登录窗口中上次访问者的用户名
|
||||
通常情况下,用户在进入WINNT网络之前必须输入自己的用户名称以及口令。但是当你重新启动计算机,登录WINNT时,WINNT会在缺省情况下将上一次访问者的用户名自动显示在登录窗口的“用户名”文本框中。这样一来,有些非法用户可能利用现有的用户名来猜测其口令,一旦猜中的话,将会对整个计算机系统产生极大的安全隐患。为了保证系统不存在任何安全隐患,我们可以通过修改WINNT注册表的方法来也提供了启动时自动以某一个组的用户名称和口令进行访问WINNT,而不需要通过人工设置的方法来自动清除登录窗口中上次访问者的用户名信息。要实现自动清除功能,必须要进行如下配置: A、在开始菜单栏中选择运行命令,在随后打开的运行对话框里输入REGEDIT命令,从而打开注册表编辑器。
|
||||
B、在打开的注册表编辑器中,依次展开以下的键值: [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON]
|
||||
C、在编辑器右边的列表框中,选择“DONTDISPLAYLASTUSERNAME”键值名称,如果没有上面的键值,可以利用“编辑”菜单中的“新建”键值命令添加一个,并选择所建数据类型为“REG_SZ”。
|
||||
D、选择指定的键值并双击,当出现“字符串编辑器”对话框时,在“字符串”文本框中输入“1”,其中“1”代表起用该功能,“0”代表禁止该功能。
|
||||
E、当用户重新启动计算机登录WINNT时,NT登录对话框中的“用户名”文本框中将是空白的。
|
||||
2、为一些非SCSI接口光驱进行手工配置
|
||||
如果你想在WINNT上安装一个非SCSI接口的光驱,在WINNT版本较高的计算机中这中类型的光驱可能被自动识别并自动由计算机来完成其安装任务,不巧的是,你的计算机中安装了一个低版本的操作系统,例如安装了WINNT3.5,还没有时间来升级,但现在就着急用光驱呢,那该怎么办才好呢?不急,虽然Windows NT3.5不能自动识别非SCSI接口的光驱,但我们可以通过手工安装的方式来帮你轻松搞定这个小问题,具体工作步骤为:
|
||||
A、首先必须将你手中的对应的非SCSI接口的CD-ROM驱动程序从安装盘拷贝到WINNT\SYSTEM32\DRIV ERS目录下。
|
||||
B、在WINNT主群组中打开Setup图标。
|
||||
C、从OPTION菜单中选择“Add/Remove SCSI Adapters”。 D、用鼠标单击ADD按钮,为你的非SCSI接口CD-ROM选择对应的驱动程序。
|
||||
E、接着单击“INSTALL”按钮进行一些相关参数的配置。 F、退出Windows NT,重新启动计算机后光驱就会有用了。
|
||||
3、增加NTFS性能
|
||||
如果用户想增加NTFS的性能,也可以通过修改注册表的方法来达到目的,具体实现步骤如下:
|
||||
A、打开注册表编辑器,并在编辑器中依次展开以下键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
|
||||
B、在注册表编辑器中用鼠标单击“编辑”菜单,并在下拉菜单中选择“新建”菜单项,并在其弹出的子菜单中单击“DWORD值”。
|
||||
C、 在编辑器右边的列表中输入DWORD值的名称为“NtfsDisableLastAccessUpdate”。
|
||||
D、 接着用鼠标双击NtfsDisableLastAccessUpdate键值,编辑器就会弹出一个名为“字符串编辑器”的对话框,在该对话框的文本栏中输入数值“1”,其中0代表“取消”该项功能,1代表“启用”该项功能。
|
||||
E、设置好后,重新启动计算机就会使上述功能有效。
|
||||
4、修复镜像组
|
||||
A、当镜像磁盘组中的驱动器发生故障时,系统自动向其余的驱动器发出发送数据请求,留下工作驱动器单独运行。此时,用户需要进入Disk Administrator,选择镜像组,再选择FaultTolerance/Break Mirror,将镜像组分为两个独立部分。
|
||||
B、工作的驱动器得到磁盘组所用的驱动器盘符,故障驱动器得到系统的下一个有效盘符。关闭NT Server,更换一个相同型号的硬盘驱动器。
|
||||
C、重新启动NT Server,运行Disk Administor,在新驱动器上选择分区和未用空间,选择Fault Tolerance/Establish Mirror即可对新驱动器作镜像。
|
||||
5、自定义启动信息
|
||||
每次当WINNT启动时,它都会显示“请按CTRL+ALT+DELETE键来登录”的信息,而如果你希望用户在按完CTRL+ALT+DELETE键后,画面上自动显示用户自己希望所看到的信息,可以通过如下的相关设置来进行:
|
||||
A、在开始菜单栏中选择运行命令,在随后打开的运行对话框里输入REGEDIT命令,从而打开注册表编辑器。
|
||||
B、在打开的注册表编辑器中,依次展开以下的键值: [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON]
|
||||
C、在编辑器右边的列表框中,选择“LEGALNOTICECAPTION”键值名称,如果没有上面的键值,可以利用“编辑”菜单中的“新建”键值命令添加一个,并选择所建数据类型为“REG_SZ”。
|
||||
D、选择指定的键值并双击,当出现“字符串编辑器”对话框时,在“字符串”文本框中输入用户希望看到的信息窗口的标题内容,例如输入“WINNT网络”。
|
||||
E、接着在下面一个“字符串”文本框中输入信息窗口要显示的具体内容,例如输入“欢迎使用WINNT网络”。
|
||||
F、重新启动计算机后,再次登录进WINNT网络时,用户将会看到自己在上面设置的内容。
|
||||
|
||||
|
||||
6、加速文件管理系统缓存
|
||||
大家知道计算机的速度有很大一部分与内存相关,如果内存容量大一点,计算机运行速度就会相应快一点。但是假设在内存一定的情况下,如何来提高计算机的运行速度呢?这就是我们下面通过注册表设置要实现的内容,具体步骤如下:
|
||||
A、在开始菜单栏中选择运行命令,在随后打开的运行对话框里输入REGEDIT命令,从而打开注册表编辑器。
|
||||
B、在打开的注册表编辑器中,依次展开以下的键值: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]。
|
||||
C、在编辑器右边的列表框中,选择“IoPageLockLimit”键值名称,如果没有上面的键值,可以利用“编辑”菜单中的“新建”键值命令添加一个,并选择所建数据类型为“DWORD”。
|
||||
D、选择指定的键值并双击,当出现“字符串编辑器”对话框时,在“字符串”文本框中输入用户需要的数值,系统默认缓存为512K,其他的参考值如下:
|
||||
RAM (MB) IoPageLockLimit 32 4096000 64 8192000 128 16384000 256+ 65536000
|
||||
E、当用户重新启动计算机登录WINNT时,文件管理系统缓存将得到改善。
|
||||
7、增加“关闭系统”按钮
|
||||
在NT计算机中,“关闭系统”按钮作为缺省值在登陆对话框中提供,这个任务按钮允许用户不必先登陆即可关闭系统。在NT SERVER中虽然没有这个功能,但可以通过修改注册表,使系统在登陆对话框中增加一个“关闭系统”的按钮,具体操作方法如下:
|
||||
A、打开注册表编辑器,并在编辑器中依次展开以下键值: [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON]。
|
||||
B、在编辑器右边的列表中用鼠标选择“SHUTDOWNWITHOUTLOGON”键值。
|
||||
C、接着用鼠标双击“SHUTDOWNWITHOUTLOGON”键值,编辑器就会弹出一个名为“字符串编辑器”的对话框,在该对话框的文本栏中输入数值“1”,其中0代表取消“关闭系统”按钮,1代表增加“关闭系统”按钮。
|
||||
D、退出后重新登录,在登录的界面中会增加一个“关闭系统”的按钮。
|
||||
8、在NT下创建一个镜像集
|
||||
A、先用Disk Administerator创建镜像集的第一个分区表,选中该分区,在另一个磁盘驱动器内的磁盘空间的未用区域上进行Ctrl+鼠标单击操作,以把未用的磁盘区域和第一个分区均选上。
|
||||
B、从Disk Ad ministor的Fault Tolerlance(容错)菜单中选中Establish Mirror(建立镜像 ),Disk Administor将在被选自由盘区外创建一个磁盘分区。该分区与原有分区一样大,并包含原分区表上所有数据的备份。
|
||||
C、如果要取消镜像集(并非删除镜像集),即仅仅停止两个分区之间的数据复制,只需从Disk Administor中选择Fault Tolerance/Break Mirror。
|
||||
9、登录局域网超时自动断开
|
||||
在登录Windows NT网络时,有可能用户不小心输错了登录参数或其他原因,导致了登录网络可能需要花费好长时间,这种情况是我们不想看到的。为了解决这种问题,我们可以通过注册表,来配置为闲置超时断开,以分钟为单位,具体步骤为:
|
||||
A、打开注册表编辑器,并在编辑器中依次展开以下键值: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]
|
||||
B、在编辑器右边的列表中用鼠标选择“AUTODISCONNECT”键值。
|
||||
C、接着用鼠标双击“AUTODISCONNECT”键值,编辑器就会弹出一个名为“字符串编辑器”的对话框,在该对话框的文本栏中输入数值“1”,其中0代表取消自动断开功能,1代表使用自动断开功能。
|
||||
D、退出后重新登录网络,上述功能就会生效。
|
||||
10、改变远程访问服务的缺省端口传输速度
|
||||
Windows NT远程访问服务为每个RAS串行端口设置两种BPS速度:载波BPS与联接BPS速度,前者是指两个Modem通过电话线传输数据的速度,后者则指Modem与主机串口间的数据传输速度;当远程服务被启动时,计算机首先将其联接BPS速度值存放于\System Root\\System32\RAS\Modem.INF文件中,以MAXC ARRIERBPS参数形式存放,然后将该值保存在RASSERIAL.INF文件中,以后每次进行传输时对串口作初始化,只需改变SERIAL.INI文件,即可改变串口传输速度,具体操作方法如下:
|
||||
A、将SERIAL.INI文件用编辑器打开。
|
||||
B、将INITIALBPS参数改为自己所希望的数值。
|
||||
C、将上述改动保存成一个文件,文件名仍为SERIAL.INI。
|
||||
D、打开“开始”菜单,并单击“运行”命令,在运行栏中输入RasAdmin命令。
|
||||
E、从服务器菜单中选择“Stop Remote Access Service”,再选择“Start Remote Access Service”,上述设置就会生效。 自动检测慢网登陆
|
||||
上面我们曾经说过,在登录NT网络时有可能很慢。同样地,如果Windows NT检测速度有困难,可以取消。具体实现步骤为:
|
||||
A、打开注册表编辑器,并在编辑器中依次展开以下键值:
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
|
||||
B、在编辑器右边的列表中用鼠标选择“SlowLinkDetectEnabled”键值,如果没有该键值,必须新建一个DWORD值,名称设置为“SlowLinkDetectEnabled”。
|
||||
C、接着用鼠标双击“SlowLinkDetectEnabled”键值,编辑器就会弹出一个名为“字符串编辑器”的对话框,在该对话框的文本栏中输入数值“1”,其中0代表取消自动检测慢网登陆功能,1代表使用自动检测慢网登陆功能。
|
||||
D、退出后重新登录网络,上述设置就会起作用。
|
||||
|
||||
|
||||
12、加快网络传输速度
|
||||
对于拨号用户来说,时间就是金钱,怎样才能节约时间,节省金钱呢?回答是提高网络传输速度。那又如何提高网络传输速度呢?大家知道,网络速度主要是受网络带宽限制的。增加带宽不是拨号用户所能做到的,他们唯一能做的就是把调制解调器的传输速度能够再提高一点。其实拨号用户还可以从计算机本身运行速度出发,尽量能挖掘计算机在网络加速方面最大的潜能。下面我们就通过一些设置来尽量加快网络传输速度,具体设置如下:
|
||||
A、在开始菜单栏中选择运行命令,在随后打开的运行对话框里输入REGEDIT命令,从而打开注册表编辑器。
|
||||
B、在打开的注册表编辑器中,依次展开以下的键值: [HKEY_LOCAL_MACHINE\System\Current Control Set\Services\Class\NetTrans00n ],其中n表示个别拔号网络连接项号码。
|
||||
C、在编辑器右边的列表框中,选择“MaxMTU”键值名称,如果没有上面的键值,可以利用“编辑”菜单中的“新建”键值命令添加一个,并选择所建数据类型为“DWORD”值。
|
||||
D、选择指定的键值并双击,当出现“字符串编辑器”对话框时,在“字符串”文本框中输入“576”,576代表最大传输单元值。
|
||||
E、接着在编辑器菜单栏中依次选择“编辑”→“新增”→“字符串值”,右边列表窗口就会多出一个新字符串,把它 命名为“MaxSSS”,再双按这个字符串值并把它设定为“536”。
|
||||
F、重新返回到编辑器的主操作界面,并依次展开如下键值: [HKEY_LOCAL_MACHINE\System\Current Control Set\Services\VxD\MSTCP]。
|
||||
G、按照上述同样的操作方法,在编辑器右边的列表中依次添加字符串值“DefaultRcvWindow”、 “DefaultTTL”,并且把它们的数值分别设置为“2144”,“64”。
|
||||
H、当用户重新启动计算机登录WINNT时,上述所有的设置将会生效,这样计算机将会发挥它在网络加速方面最大的能量。
|
||||
|
||||
|
||||
13、自动登陆网络
|
||||
通常情况下,用户在进入WINNT网络之前必须输入自己的用户名称以及口令。但是WINNT也提供了启动时自动以某一个组的用户名称和口令进行访问WINNT,而不需要通过人工设置的方法来输入登陆网络的参数。要实现自动登陆功能,必须要进行如下配置:
|
||||
A、打开注册表编辑器,并在编辑器中依次展开以下键值:
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENT VERSION\WINLOGON]
|
||||
B、用鼠标单击右边的“AUTOADMINLOGON”键值名称,编辑器就会弹出一个名为“字符串编辑器”的对话框,在该对话框的文本栏中输入数值“1”。
|
||||
C、接着再用鼠标选择右边的“DEFAULTDOMAINNAME”键值名称,并在随后弹出的文本栏中输入所要登陆的域名名称或所要访问的计算机名称,例如输入“DOMAIN”域或“COM”计算机名称,然后单击“确定”按钮。
|
||||
D、按照同样的操作方法,选择右面的“DEFAULTUSERNAME”键值名称,并在“字符串”文本框中输入登陆网络的用户名称,例如输入管理员名称“ADMINISTRATOR”,并单击“确定”按钮。
|
||||
E、最后在注册表编辑器中,用鼠标单击“编辑”菜单并在下拉菜单中选择“新建键值”命令,然后在注册表右边的列表中,输入键值名称为“DEFAULTPASSWORD”,键值类型为“REG_SZ”,接着单击“确定”按钮。
|
||||
F、 用鼠标双击“DEFAULTPASSWORD”键值,在弹出的对话框中输入用户的密码,在这里我们输入系统管理员的口令作为登陆网络的密码,输入完成后单击“确定”按钮结束设置工作。
|
||||
G、 让计算机重新启动,缺省设置的用户将会自动登陆到指定的网络中去。
|
||||
如果用户日后不再需要自动登陆功能时,只需要把“AUTOADMINLOGON”的键值改为数值“0”即可。
|
||||
14、禁止光盘的自动运行功能
|
||||
大家都很清楚每当光盘放到计算机中时,WINNT就会执行自动运行功能,光盘中的应用程序就会被自动运行,而我们在实际工作中有时不需要这项功能,那么如何屏蔽该功能呢。此时,我们同样可以修改注册表使此功能失效,具体做法如下:
|
||||
A、打开注册表编辑器,并在编辑器中依次展开以下键值: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom] 。
|
||||
B、在编辑器右边的列表中用鼠标选择“AUTORUN”键值。
|
||||
C、接着用鼠标双击“AUTORUN”键值,编辑器就会弹出一个名为“字符串编辑器”的对话框,在该对话框的文本栏中输入数值“0”,其中0代表“禁用”光盘的自动运行功能,1代表“启用”光盘的自动运行功能。
|
||||
D、设置好后,重新启动计算机就会使上述功能有效。
|
||||
15、取消系统检测串口,提高NT系统启动速度
|
||||
计算机每次启动都会对计算机的硬件要重新检测一遍,这需要花费一定的时间,也因此就减慢了计算机的启动速度。在这里笔者向大家介绍一下通过一些设置来取消系统检测串口,从而达到提高NT系统启动速度的目的,具体步骤如下:
|
||||
A、在开始菜单中,用查找的方法将Boot.INI文件找出来,然后将该文件的“只读”属性屏蔽掉,以便于我们在其中进行一些相关改动。
|
||||
B、接着用一个文本编辑器将Boot.INI文件打开,并修改[operating system]段的内容,将其中每一行后加上NoserialMice参数,如下所示:
|
||||
修改Boot.INI文件,
|
||||
……
|
||||
[operating system]
|
||||
multi(0) disk(0) rdisk(0)
|
||||
partition(1)\WINNT40="Windows NT
|
||||
Workstation Version4.0"/NoSerialMice ……
|
||||
C、把上述修改的内容保存起来,文件名仍为Boot.INI。
|
||||
D、退出Windows NT,重新启动计算机后上述配置就会生效。
|
||||
|
||||
XP六条未公开的秘技
|
||||
支持137 GB以上大硬盘
|
||||
|
||||
|
||||
想要使用137 GB以上大硬盘,必须使用48位LBA模式。首先你的主板BIOS必须支持48Bit LBA,其次WinXP 家用版和专业版必须安装SP1补丁。然后打开注册表,在如下路径“HKEY_LOCAL_MACHINE System CurrentControlSet Services Atapi Parameter”找到“EnableBigLba”选项,将其值由“0”改为“1”。如果该项不存在,可以自建“DWORD值”项目,同样设置.最后重新启动即可.
|
||||
|
||||
|
||||
删除共享文档
|
||||
|
||||
|
||||
如果你不需要共享文件,可以这样移除它:进入HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion Explorer My computer Namespace DelegateFolders,删除键值“”。
|
||||
|
||||
|
||||
锁定桌面
|
||||
|
||||
|
||||
想要锁定桌面不被别人肆意修改,可以使用很多工具例如TweakUI,不过其实在注册表里进行小小的改动即可实现:进入HKEY_CURRENT_USER Software Microsoft Windows CurrentVersion Policies Explorer,建立DWORD值“NoDesktop”,将其值修改为“1”即可。
|
||||
|
||||
|
||||
停用“上次访问时间标记(Last Access Time Stamp)”
|
||||
|
||||
|
||||
不想要这项功能,可以这样修改:进入HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control File system,新建DWORD值“NtfsDisableLastAccessUpdate”,将其值修改为“1”即可。
|
||||
|
||||
|
||||
设置“远程访问连接服务器(RAS)”
|
||||
|
||||
|
||||
需要的话可以这样修改:进入HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Winlogon,新建字符串值“KeepRasConnections”,将其值修改为“1”即可。
|
||||
|
||||
|
||||
使用明文密码(Lain Text Password)
|
||||
|
||||
|
||||
访问UNIX或者LINUX服务器的时候,有时需要明文密码这在XP下很容易实现:找到“HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services lanmanworkstation parameter enableplaintextpassword”并将其值设置为“1”即可
|
||||
|
||||
|
||||
控制面板
|
||||
在Windows 2000的控制面板中有1 9个标准的应用小程序( a p p l e t ),每一个应用小程序都有
|
||||
影响注册表条目的能力(具有添加硬件和安装软件功能的系统还包括另外一些应用小程序);
|
||||
添加/删除硬件系统H K E Y _ L O C A L _ M A C H I N E \ H A R D WA R E
|
||||
添加/删除程序系统H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E
|
||||
管理工具系统H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E
|
||||
日期/时间系统H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E
|
||||
显示系统和用户H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M和HKEY _
|
||||
CURRENT _ USER
|
||||
文件夹选项系统H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E
|
||||
字体系统H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E
|
||||
I n t e r n e t选项系统H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E
|
||||
键盘系统和用户H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E和HKEY _
|
||||
CURRENT _ USER
|
||||
鼠标系统和用户H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E和HKEY _
|
||||
C U R R E N T _ U S E R
|
||||
网络和拨号连接系统H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E
|
||||
电话和调制解调器选项系统H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M
|
||||
电源选项系统H K E Y _ L O C A L _ M A C H I N E \ H A R D WA R E
|
||||
打印机系统H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M
|
||||
区域设置系统H K E Y _ L O C A L _ M A C H I N E \ S Y ST E M
|
||||
任务计划系统H K E Y _ L O C A L _ M A C H I N E \ S O FT WA R E
|
||||
声音和多媒体系统和用户H K E Y _ L O C A L _ M A C H I N E \ S O F T WA R E和HKEY _C U R R E N T _ U S E R
|
||||
系统系统和用户H K E Y _ L O C A L _ M A C H I N E \ S OF T WA R E,HKEY _
|
||||
L O C A L _ M A C H I N E \ S Y S T E M和HKEY_CURRENT_USER
|
||||
|
||||
|
||||
以前,对于在Windows 2000或Windows XP上玩CS的人来说,是否开显卡的垂直同步是个两难的选择。不开垂直同步可以得到更高的FPS,但画面老是抖动,打时间长了眼睛很累;开了垂直同步,FPS就肯定超不过60。但我相信还有很多朋友不知道该怎么办,因此把解决办法公布,希望能对大家有所帮助。
|
||||
|
||||
|
||||
在Window 2000或XP下,开垂直同步后FPS超不过60的原因是:Window 2000或XP在这种情况下会把游戏中的FPS设定为Windows的缺省值60,再好的配置也没用。
|
||||
|
||||
|
||||
解决这个问题的办法很多,可以用第三方程序如PowerStrip等,但这种办法需要外挂程序,可能不安全。最近,我终于找到最根本的解决办法,就是在直接在注册表里把Windows的缺省值改成100(或更高,只要你的显示器支持就可以)。请千万注意:在修改注册表前,一定要确认你的显示器在不同的分辨率下所支持的最高刷新频率。比如,我的电脑在1024*768的分辨率下能达到100Hz的刷新频率,我玩CS也是在这个分辨率下玩,所以,我才敢把Windows的缺省值设为100。另外也请注意,这样修改完注册表后,你电脑桌面的分辨率和刷新频率也会被限定为这个数值。
|
||||
|
||||
|
||||
修改注册表的方法如下:
|
||||
|
||||
|
||||
Open regedit and find this key:
|
||||
运行regedit命令进入注册表修改界面;
|
||||
进入[HKEY_LOCAL_MACHINEsystemCurentControlSetControlClass],打开"Class"键,你将看到一大排的键,类似于
|
||||
|
||||
|
||||
{4D36E96E-E325-11CE....}
|
||||
|
||||
|
||||
如果你选中其中一个键你将可以看到一些键值,如"Default"、"Class"等,并指明设备的种类,如"Modem", "Keyboards"等,逐个打开这些{4D36E96E-E325-11CE....}键,直到看到"Class"的键值是"Monitor"。好的,我们已经找到控制显示器的注册信息了,接下来就是在这里面该缺省值了。
|
||||
|
||||
|
||||
打开你刚找到的那个键,里面至少应该有1个键,叫做"0000",这里也可能有其他的键,如"0001"、"0002"等。如果里面只有个"0000",那就简单了,你直接在"0000"里按下面的方法修改就可以了。如果有多个键,你就必须逐个找出来哪个键是控制你的显示器的,方法是逐个键地按照下面说的“修改缺省值的操作”进行修改,修改后立即用下面说的“检查缺省值是否修改”的方法检查,如果相符就说明这个键是控制你显示器的,否则就不是。
|
||||
|
||||
|
||||
“修改缺省值的操作”方法:
|
||||
|
||||
|
||||
打开"0000"或你找到的其他的键,你可以看到里面有个"MODES"键,打开它你将看到一个键显示的是你的显示器的最大分辨率,如"1600,1200",现在假设你要在1024*768的分辨率下达到100Hz的刷新率,那么操作如下:在"MODES"下增加一个键叫做"1024,768",在"1024,768"键里增加一个键叫做"Mode1",键值设为"100-100,100-100"。修改缺省值得操作完毕。
|
||||
|
||||
|
||||
“检查缺省值是否修改”的方法:
|
||||
|
||||
|
||||
进入"Display properties -> Setting",看分辨率是否为你设定的值,如果不是那么说明你修改的那个类似于"0000"的键不是现在控制你显示器的键,,如果分辨率是你设定的值(如1024*768),那么再进"Advanced -> Monitor"里面看显示器的刷新频率是不是也是你设定的值,如果是,选中"Hide all unsupported modes"后你的刷新频率应该只有一个值可以选择,就是你设定的值(如100Hz)。这说明你修改得正确。
|
||||
|
||||
|
||||
总结:
|
||||
|
||||
|
||||
修改后,你进入游戏后无论游戏是用Direct3D还是OpenGL,你的FPS都可以超过60了。这个修改方法对Windows 2000和Windows XP都有效
|
||||
|
||||
|
||||
三、最新Windows XP注册表实用配置技巧
|
||||
1.屏蔽当鼠标移动到标准控制按钮的提示信息
|
||||
|
||||
|
||||
当你将鼠标移动到一个标准窗口上的三个控制按钮(最小化、最大化、关闭)上时,它将显示每一项的文本提示。通过注册表可以屏蔽这个功能。打开注册表子键:HKEY_CURRENT_USER\Control panel\Desktop\,创建一个新的键值项或者修改已经存在的键值项“MinMaxclose”(字符串型),并设置其值:0表示屏蔽此功能;1表示激活此功能。
|
||||
|
||||
|
||||
2.通过注册表查看系统BIOS信息
|
||||
|
||||
|
||||
在注册表里储存着关于系统主板BIOS的有关信息,包括最终日期、版本号和视频BIOS日期等信息。打开注册表子键:HKEY_LOCAL_MACHINE\Hardware\Description\System,其下面的键值项:Systembiosdate、Systembiosversion、Videobiosdate分别记录着这些BIOS信息。
|
||||
|
||||
|
||||
3.启动自动最优化磁盘功能
|
||||
|
||||
|
||||
在Windows XP系统中,需要时可以自动初始优化磁盘系统的新功能。在注册表中可以控制此功能是否有效。打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Dfry\Bootoptimizefunction,新建字符串型键值项“Enable”,并设置其值:“Y”为此功能有效,“N”反之。
|
||||
|
||||
|
||||
4.限制自动登录的数量
|
||||
|
||||
|
||||
这个设置可以限制自动登录的次数,一旦限制已经到了额定次数,自动登录功能就会拒绝登录系统。打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Nt\CurrentVersion\Winlogon,创建一个新的字符串型或者修改现有的“autologoncount”键值项,并且根据需要设置其值的大小。
|
||||
|
||||
|
||||
注意:每次系统重新启动,autologoncount的值将被消耗一个,直到为零。当值为零时,将没有账户可以自动登录,autologoncount和默认密码键值将从注册表中删除且autoadminlogon将被设置为零。
|
||||
|
||||
|
||||
5.使用Windows NT/2000的登录界面登录Windows XP
|
||||
|
||||
|
||||
Windows XP采用了一个全新的登录界面,全新的登录方法和显示用户的图片信息,让整个过程更加舒心、个性化。然而在某些场合,可能还会用到Windows NT/2000登录界面,可以通过一些组合键来实现此功能:
|
||||
|
||||
|
||||
(1)同时按下Ctrl+Alt键。
|
||||
|
||||
|
||||
(2)连续按下Del键两次。
|
||||
|
||||
|
||||
登录界面将变成Windows NT/2000式的界面,此时,你可以通过点击“取消”按钮来切换到Windows XP界面。
|
||||
|
||||
|
||||
6.定义Windows XP时钟服务器 Windows XP有一个新的特色,它可以将系统的时钟与Internet上的时钟服务器进行同步校正,用以下方法你可以修改或添加默认的时钟服务器。打开注册表子键HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DateTime\Servers,设置此子键的默认值为服务器的IP地址或者域名即可。
|
||||
|
||||
|
||||
7.锁定/解除任务栏在桌面上的位置
|
||||
|
||||
|
||||
打开注册表子键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced,新建或者修改双字节值项“TaskbarSizeMove”,并设置其键值:0为锁定;1则为解开锁定。修改完成后,注消或重新启动使其生效。
|
||||
|
||||
|
||||
8.改进核心存取系统性能
|
||||
|
||||
|
||||
在具有大量RAM存储量的系统中,这个技巧可以强迫Windows核心进程被驻留在存储器里而不是在程序和磁盘交换文件之间来回切换,从而大大提高系统运行效率。打开注册表子键:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management,在其下新建一个双字节值项:Disablepagingexecutive,并设置其值:1使此功能被激活并且阻止核心进程进行磁盘页面交换;0则设其为默认值。重新启动计算机使设置生效。
|
||||
|
||||
|
||||
9.优化I/O缓冲大小的默认设置
|
||||
|
||||
|
||||
此功能可用于改变Windows XP对于I/O缓冲大小的默认设置。打开注册表子键HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management,新建或者编辑双字节值项“IoPageLockLimit”,并设置其值,其值有二进制和十六进制,单位为Beyte。在设置缓冲大小时,请逐渐增大数值,在增大的过程中观察设置的性能,因为盲目的增大也会浪费系统资源。
|
||||
|
||||
|
||||
10.屏蔽/打开“分组相似任务栏按钮”功能
|
||||
|
||||
|
||||
此功能用于是否将相似的窗口条目集合在一起或作为单个按钮显示在任务栏上。打开注册表子键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced,新建或者编辑双字节值项“TaskbarGlomming”,并设置其值:0为屏蔽此功能;1为运行此功能。
|
||||
|
||||
|
||||
11.自定义激活“分组相似任务栏按钮”的窗口数量
|
||||
|
||||
|
||||
在注册表里,可以设置当某个窗口达到一定数量后,才激活“分组相似任务栏按钮”的功能,打开注册表子键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced,新建或者编辑双字节值项“TaskbarGroupSize”,并设置其值为欲设的窗口数量,一般可为2~10左右。
|
||||
|
||||
|
||||
12.设置当IE 6.0发生错误时是否允许错误报告
|
||||
|
||||
|
||||
设置是否允许错误报告,主要用于报告IE 6.0出现错误时将错误信息收集并通过Internet发送到微软技术部门,通过下面的方法可以屏蔽此功能。打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main,新建或者编辑双字节值项“IEWatsonDisabled”,并设置其值为:0表示允许出现错误时报告;1表示不报告。
|
||||
|
||||
|
||||
13.让IE使用多线程下载网页
|
||||
|
||||
|
||||
现在很流行Netants、FlashGet等多线程下载工具,其实IE也可以使用多线程下载网页,这样在设置适当的情况下,可以加快网页下载速度。打开注册表子键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings,新建双字节值项“MaxConnectionsPerServer”,此项的作用是决定最大同步下载的连线数目,一般5~8个连线数目比较好。另外,对于HTTP 1.0服务器,可以加入名为“MaxConnectionsPer1_0Server”的双字节值项,其值也是设置最大同步下载的数目。
|
||||
|
||||
|
||||
14.设置Windows XP的DOS文件名风格
|
||||
|
||||
|
||||
此设置用于控制是否允许在NTFS分区上使用DOS的8.3式的文件,禁止这项功能,将使NTFS分区的性能更高。打开注册表子键:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,新建或者编辑双字节值项“NtfsDisable8dot3NameCreation”,并设置其值:0表示不允许;1表示允许。
|
||||
|
||||
|
||||
注意:对于一些十六位的安装程序将会自动使这项功能打开。
|
||||
|
||||
|
||||
15.屏蔽/打开菜单阴影效果
|
||||
|
||||
|
||||
Windows XP的阴影菜单效果确实更加个性化、绚丽,但对于系统性能较低的机器,此功能将消耗系统资源,通过注册表可以屏蔽/打开此功能。打开注册表子键:HKEY_CURRENT_USER\Control Panel\Desktop,新建或者编辑已有二进制类型键值项“UserPreferencesMask”,设置其值为:将第二个二位改为“28”表示滚动效果表示屏蔽;改为“3E”打开阴影效果。重新启动计算机后可看到效果。
|
||||
|
||||
|
||||
16.打开无须登陆系统功能 此功能用于控制对于便携电脑的用户即便在没有登录时,也有可以使用电脑。打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System,新建或者编辑已有双字节值项“UndockWithoutLogon”,并设置其值为:0表示不允许有此功能;1表示允许此功能。
|
||||
|
||||
|
||||
17.设置“尚未阅读信息”的最大期限
|
||||
|
||||
|
||||
Windows XP新功能包括在登录时显示几天内尚未阅读的新信息,我们可以注册表里设置此最大期限。打开注册表子键,如果仅仅应用于当前用户,则打开“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UnreadMail”子键,如果应用于所有用户则打开“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\UnreadMail”子键,新建或者编辑已有双字节值项“MessageExpiryDays”,并设置其值为具体的天数。
|
||||
|
||||
|
||||
18.隐藏/显示桌面图标
|
||||
|
||||
|
||||
新的Windows XP外观更加个性化,桌面似乎也变得更加简洁,刚刚安装的系统桌面上,仅仅只有一个“回收站”图标,多少有点不方便,其实默认情况下其他常用的图标(如我的电脑、网上邻居等)都被设置为隐藏,我们可以通过注册表可以设置他们是否隐藏/显示。打开注册表子键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel,新建下面所列对应的任何一个双字节值项:
|
||||
|
||||
|
||||
IE图标:{20D04FE0-3AEA-1069-A2D8-08002B30309D}
|
||||
|
||||
|
||||
回收站图标:{871C5380-42A0-1069-A2EA-08002B30309D}
|
||||
|
||||
|
||||
网上邻居图标:{208D2C60-3AEA-1069-A2D7-08002B30309D}
|
||||
|
||||
|
||||
我的文档图标:{450D8FBA-AD25-11D0-98A8-0800361B1103}
|
||||
|
||||
|
||||
我的电脑图标:{645FF040-5081-101B-9F08-00AA002F954E}
|
||||
|
||||
|
||||
并设置其值为:1为隐藏相应图标;0为显示相应图标。
|
||||
|
||||
|
||||
19.显示/隐藏公共对话框中的“后退”按钮
|
||||
|
||||
|
||||
Windows XP中可以调用功能更加强大、界面更加友好的新的公共对话框函数(comdlg32.dll),新的对话框中包含了“后退”这一方便的功能按钮,但如果想隐藏它,也可以通过注册表来设置。打开注册表子键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32,新建或者编辑已有双字节值项“ NoBackButton”,并设置其值为:1为隐藏;0为显示。
|
||||
|
||||
|
||||
20.显示/隐藏公共对话框中的“查找范围快速定位区”
|
||||
|
||||
|
||||
如上面说到的一样,Windows XP公共对话框中的“查找范围”快速定位区也是可以隐藏/显示的。打开注册表子键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32,新建或者编辑已有双字节值项“ NoPlacesBar”,并设置其值为:1为隐藏;0为显示。
|
||||
|
||||
|
||||
21.防止应用程序窗口失去焦点
|
||||
|
||||
|
||||
如果当前的窗口被另一个自动运行的程序窗口覆盖,即失去焦点,在以往的Windows操作系统中,特别是Windows 2000中,常常因为窗口失去焦点,致使窗口无法正常被控制。Windows XP中增加了对窗口焦点的操作功能,具体可在注册表中设置。打开注册表子键:HKEY_CURRENT_USER\Control Panel\Desktop,新建或者编辑已有双字节值项“ForegroundLockTimeout”,并设置其值:如果是0,则屏蔽锁定当前窗口焦点功能;如果是具体的数字(单位为毫秒),则在等待设定的时间后自动释放被锁定的焦点。
|
||||
|
||||
|
||||
然后在上面的子键下新建或者编辑已有双字节值项“ForegroundFlashCount”,并设置其值:如果是0,则闪烁任务栏中的窗口直到单击后才停;如果是具体的数字,则当闪烁指定的次数后自动释放被锁定的焦点。
|
||||
|
||||
|
||||
22.激活磁盘DMA66模式
|
||||
|
||||
|
||||
激活磁盘系统DMA功能可以节省更多的CPU资源对磁盘进行操作,通过注册表可以控制系统是否打开此功能。打开注册表子键:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0000,新建或者编辑已有双字节值项“EnableUDMA66”,并设置其值:0表示取消此功能;1表示激活此功能。
|
||||
|
||||
|
||||
23.锁定IE的下载功能
|
||||
|
||||
|
||||
打开注册表子键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ Internet Settings\Zones\3,新建或者编辑已有双字节值项“1803”,并设置其值:3表示锁定;0表示不锁定。
|
||||
|
||||
|
||||
24.禁止使用“LAST KNOW GOOD”(最后一次成功引导)
|
||||
|
||||
|
||||
“LAST KNOW GOOD”(最后一次成功引导)可以在系统瘫痪时恢复到上一次运行正常时的状态,如果出于需要而屏蔽此功能,可以使用注册表来设置。打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT,新建或编辑已有子键“ReportBootOk”,并设置其值:1为启用此功能;0为屏蔽此功能。
|
||||
|
||||
|
||||
25.控制发生错误时是否弹出警告窗口
|
||||
|
||||
|
||||
默认情况下,当应用程序发生严重错误被关闭时会弹出警告窗口,并可以看到一些程序错误信息,如果不想看到此警告弹出窗口,可以在注册表里设置。打开注册表子键:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Windows,新建或者编辑已有双字节值项“ErrorMode”,并可设置键值为:0,所有错误都弹出显示“默认”;1,系统错误不显示,应用程序错误显示;2,系统和应用程序同时发生错误则弹出显示。
|
||||
|
||||
|
||||
26.控制当系统崩溃时是否记录日制
|
||||
|
||||
|
||||
打开注册表子键:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl,新建或者编辑已有双字节值项“LogEvent”,并设置其值为:0为不记录;1为记录。
|
||||
|
||||
|
||||
27.定制Regedit的收藏夹
|
||||
|
||||
|
||||
Windows XP新版的Regedit增加了“收藏”功能,但却没有管理收藏功能,你只能创建、删除收藏,而不能修改以及备份这些内容。
|
||||
|
||||
|
||||
Regedit的“收藏”信息保存在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Favorites子键下,键值项的名称就是显示在Regedit“收藏夹”里的条目,而键值则是该条目指向的注册表子键路径(比如“我的电脑\HKEY_CURRENT_USER\Software\Microsoft\Windows”)。可根据自己的需求添加、删除、编辑修改这些项目。
|
||||
|
||||
|
||||
28.启用“自动完成”功能
|
||||
|
||||
|
||||
自动完成是Internet Explorer的一个体贴功能。此功能的妙处在于,当你输入以前曾经输入过的地址时,它会自动完成输入,省去了反复输入的麻烦,而特别是在地址很长的时候,更能体现它的体贴入微。
|
||||
|
||||
|
||||
Windows XP的一些命令输入窗口提供了类似的提示功能,就是在你输入以前曾经输入的内容时,它将其列出以备你选择使用,但并不自动填充完成输入。很明显这一功能比“自动完成”还差那么一点人性化的体贴。打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoComplete子键,如果该子键下没有“Append Completion”键值项,那么新建此键值项(字符串型),并赋值为“YES”,自动完成功能便启用了。
|
||||
|
||||
|
||||
29.自定义磁盘图标和卷标
|
||||
|
||||
|
||||
通过在磁盘根目录下创建并设置Autorun.inf,可以更改此磁盘的图标,其实,通过注册表的设置,同样可以达到效果,并且还可以自定义磁盘的卷标。打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons(如果没有DriveIcons子键,请新建),在该子键下新建一个与欲修改磁盘盘符相同名称的子键(比如欲修改C盘,那么新建一个以C为名的子键),然后在其下新建一个用来设置磁盘图标的“DefaultIcon”子键,并设置其默然值为图标文件的路径,比如C:\Windows\Welcome.exe或者其他图标文件。
|
||||
|
||||
|
||||
用上面一样的方法,再新建一个用来设置卷标的“DefaultLable”(即…C\DefaultLable),子键,并设置其默然值为欲设的卷标文字,比如My Drive或其他文字。
|
||||
|
||||
|
||||
以上操作完成后,重新启动或者打开资源管理器并按F5刷新,使修改生效。
|
||||
|
||||
|
||||
30.为CD-ROM和磁盘驱动器建立高级安全机制
|
||||
|
||||
|
||||
为CD-ROM和磁盘驱动器及其可移动介质建立高级安全机制,可以只被当前登录的用户访问。具体可以按照如下步骤进行修改。打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon,新建或者编辑已有字符串类型键值项AllocateCDRoms,并设置其值为:1,可以使CD-ROM达到此功能;0,屏蔽此功能。
|
||||
|
||||
|
||||
另外在该子键下还有键值项AllocateFloppies,可以使磁盘驱动器达到此效果,具体设置值与上面一样。
|
||||
|
||||
|
||||
31.确定上次登录时用户使用的域
|
||||
|
||||
|
||||
要控制用来确定成功登录到当前系统上一个用户所用域名的注册表项,可以按照如下步骤进行操作。打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon,新建或修改已有字符串类型键值项“DefaultDomainName”,其键值包含上一次成功登录时用户所用的域名。
|
||||
|
||||
|
||||
32.Windows XP登录口令过期警告
|
||||
|
||||
|
||||
要设置用来确定当用户登录且用户的口令已过期时是否显示警告对话框的注册表项,可以打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon,新建或者修改已有字符串值项“PasswordExpiryWarning”,设置其值为在用户使用即将过期的口令进行登录时显示警告对话框所需的值。
|
||||
|
||||
|
||||
33.防止用户配置文件选择对话框超时
|
||||
|
||||
|
||||
要设置在连接远程服务器有一段延迟的情况下,决定用户可以有多少时间确定使用本地配置文件还是服务器配置文件的注册表项,可以打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon,新建或者编辑已有字符串值项“ProfileDlgTimeOut”,并设置其值为当连接远程服务器遇到延迟时,允许用户在决定使用本地配置文件还是服务器配置文件时花费的时间(毫秒)。
|
||||
|
||||
|
||||
34.使用定制的Shell(外壳程序)
|
||||
|
||||
|
||||
要设置用来指定作为Windows XP缺省Shell执行的程序的名称和路径的注册表项,可以打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon,新建或者编辑已有字符串型键值项“Shell”,并设置其值改为想要使用的定制的Shell程序路径和程序文件名。
|
||||
|
||||
|
||||
35.通过性能库防止可扩充计数器超时
|
||||
|
||||
|
||||
你可能会遇到一个关于系统性能监视器的常见问题是图形或图表没有显示数据,而你知道一个进程正在执行。这是由于几个原因造成,但是最常见的原因是用来跟踪信息的可扩充计数器超时,导致进程启动延迟。你可以通过如下所示的方法修改注册表来更正这个问题,打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Perflib,新建或编辑已有双字节值项“OpenProcedureWaitTime”,并设置其值:缺省值是5000ms(毫秒),即5秒,将这个数值增加到一个合理的数值,并再次试用系统性能监视器直到获取有效数据为止。
|
||||
|
||||
|
||||
36.当资源管理器崩溃时强迫计算机重新启动
|
||||
|
||||
|
||||
如果操作系统发生故障,Windows XP就会自动重新启动。但是如果资源管理器崩溃(桌面无法显示图标或任务栏),那么你可能就必须使用键盘快捷键来注销,并重新启动资源管理器。要避免出现这种情况,可以打开注册表子键:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon,新建或编辑已有双字节值项“AutoRestartShell”,并设置其值为:1为允许在资源管理器崩溃时自动重启;0为强迫手工注销并重启。然后重新启动计算机,下次资源管理器崩溃时,计算机就会自动重启动,而不必先注销再登录。
|
||||
|
||||
|
||||
37.禁用Windows XP的文件高速缓存
|
||||
|
||||
|
||||
一个与服务相关的注册表操作是增加信箱的可用缓存以防止丢失信件,认识到这样做可能会对性能造成影响是很重要的,只有当一个很明显的涉及信件丢失的问题无法用其他方法解决时才能这样做,要做到这一点,可以打开注册表子键:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters,新建或者编辑已有双字节值项“UtilizeNtCaching”,并设置其值为:1为启用缓存;0,则禁止缓存。
|
||||
|
||||
|
||||
38.设置系统临界线程的总数
|
||||
|
||||
|
||||
打开注册表子键:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters,新建或者编辑已有双字节值项“CriticalThreads”,并设置其值为一个自己欲修改的值,增加系统可用的临界线程数。
|
Loading…
x
Reference in New Issue
Block a user